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 必须是正整数或逻辑整数。
如果符号(yHeun(c))==符号(yHeun(a)),则Matlab3Q4(第30行)中的错误
我不知道如何让 yHeun(c or a or whatever) 返回任何整数。我认为我也没有正确执行 while+for 循环。
问题:“从 H 的上限为 100 开始(高值导致 36 个月后人口为 0),下限为 1。将上面问题 #3 的求解器放在 while 循环的中间,然后继续平分 H 的上限和下限,直到上限和下限之间的差异小于 0.5。”