我試圖用Matlab中的二分法找到方程的根,因爲q
以10步間隔從2000-3000變化。然而,我的代碼並沒有打印出一個圖表,即使我有一個plot
聲明,我認爲它創建了一個無限循環,因爲當我運行它時,matlab說繁忙,除非強制關閉,否則我無法關閉該程序。我看不到任何會導致此問題的代碼,有人可以幫我解決嗎?Matlab不繪製,無限循環
function myFunction
a = 20;
b = 40;
tol = 1e-4;
q = 2000:10:3000;
t = zeros(101,1);
for i=(1:length(q))
f = @(x) (((1800).*log((160000)./(160000 - (x.*q(i)))) - (9.812).*x)./750) - 1;
t(i) = bisect(f,a,b,tol);
end
figure(1)
plot(q,t)
function c=bisect(f,a,b,tol)
k=0;
while b-a > tol
c = (a-b)/2;
if sign(f(c)) == sign(f(b))
b=c;
else
a=c;
end
k=k+1;
end
end
end
還應當指出的是,我已經使用這個bisect
方法之前和它的工作,所以我不認爲這個問題是與該功能。
嘗試增加,僅僅低於我的T(I)的字符線=平分(F ...)和運行該功能。然後,每次迭代,您都可以看到循環計數器打印到MATLAB命令窗口中。它是做你期望的嗎?它會*真的*緩慢嗎?這是否告訴你什麼? –
我實際上試過這樣做:'fprintf('%i',i);'並沒有打印 –
它不會卡在for循環中,它會卡在while循環中,很確定。你可以刪除for循環,它不會改變行爲。你的函數f是否有根?我想這與你的功能有關......或者你的初始值選擇不當。 – thewaywewalk