我试图用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