【发布时间】:2018-07-01 08:09:08
【问题描述】:
k = 0.019;
Pstar = 100;
H = 33;
h = 0.1;
X = 36;
N = round(X/h);
t = zeros(1,N+1);
P = zeros(1,N+1);
P(1) = 84;
t(1) = 0;
yHeun = zeros(1,N+1);
yHeun(1)=84;
a = 1; b = 100;
while b-a >0.5
c = (a+b)/2;
for n = 1:N
t(n+1) = t(n) + h;
Inside = nthroot(sin(2*pi*t/12),15);
Harvest = c*0.5*(Inside+1);
P(n+1) = P(n) + h*(k*P(n)*(Pstar-P(n))-Harvest(n));
if P < 0
P = 0;
end
yHeun(n+1) = yHeun(n) + h*0.5*((k*P(n)*(Pstar-P(n))-Harvest(n))+(k*P(n+1)*(Pstar-P(n+1))-Harvest(n+1)));
end
if sign(yHeun(c)) == sign(yHeun(a))
c = a;
else
c = b;
end
end
disp(['The root is between ' num2str(a) ' and ' num2str(b) '.'])
这是我正在尝试运行的代码,我知道它可能很糟糕,但我在编码方面很糟糕,每次我尝试运行代码时,它都会说:
尝试访问 yHeun(50.5); index 必须是正整数或 合乎逻辑。
Matlab3Q4 中的错误(第 30 行) if 符号(yHeun(c)) == 符号(yHeun(a))
我不知道如何让 yHeun(c 或 a 或其他) 返回任何整数。我认为我也没有正确执行 while+for 循环。
问题:“从 H 的上限为 100 开始(高值导致 36 个月后人口为 0),下限为 1。将求解器从问题 # 3 在 while 循环的中间,一直平分 H 的上下界,直到上下界之差小于 0.5。"
【问题讨论】:
-
这是什么语言?你应该添加一个标签。