2015-06-01 44 views
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。

+0

這是什麼語言?你應該添加一個標籤。 –

+0

如何變得更好:http://uk.mathworks.com/help/matlab/debugging-code.html – nkjt

回答

1

即行30(與誤差)是這樣的一種:

if sign(yHeun(c)) == sign(yHeun(a)) 

在這裏,我c等於50.5,作爲上述c = (a+b)/2結果(順便說一句,你可以發現無論我是否通過調試猜測 - 嘗試在第30行之前添加disp(c))。

要強制數是一個整數,使用floor

c = floor((a+b)/2); 

似乎您試圖使用某種類型的分而治之算法的;當b - a等於1時應該足以停止。

相關問題