0
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);索引必須是正整數或邏輯「 」。
錯誤Matlab3Q4(30行) 如果標誌(yHeun(C))==號(yHeun(一))
我沒有任何想法如何使yHeun(C或A或任何)返回任何將是一個整數。我不認爲我做了while + for循環。 「
問題:」從H的上限開始100(高值導致36個月後的人口數爲0),下限爲1.將上述問題3中的求解器置於在一段時間的中間循環中,並且保持H的上下界平分,直到上界和下界之間的差值小於0.5。
這是什麼語言?你應該添加一個標籤。 –
如何變得更好:http://uk.mathworks.com/help/matlab/debugging-code.html – nkjt