Matlab没有绘图,无限循环

时间:2013-10-08 18:14:19

标签: matlab

我正在尝试使用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方法并且确实有效,所以我认为问题不在于该功能。

2 个答案:

答案 0 :(得分:2)

您的错误在这里:

c = (a-b)/2;

您初始化a=20b=40c最初设置为-10。但您确实希望c位于ab之间,这意味着您需要:

c = (a+b)/2;

答案 1 :(得分:0)

此外,在绘制语句后立即添加drawnow以强制MATLAB绘制图形。