我正在尝试使用Matlab中的二分法来找到方程的根,因为q
在10步间隔内从2000-3000变化。然而,即使我有一个plot
语句,我的代码也没有打印出图表,我认为它创建了一个无限循环,因为当我运行它时,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
方法并且确实有效,所以我认为问题不在于该功能。
答案 0 :(得分:2)
您的错误在这里:
c = (a-b)/2;
您初始化a=20
和b=40
。 c
最初设置为-10
。但您确实希望c
位于a
和b
之间,这意味着您需要:
c = (a+b)/2;
答案 1 :(得分:0)
此外,在绘制语句后立即添加drawnow
以强制MATLAB绘制图形。