Matlab不绘图,无止境循环

Matlab不绘图,无止境循环,matlab,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

我试图使用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
方法,它确实有效,所以我认为问题不在于这个函数

另外,在plot语句之后添加一个
drawnow
,强制MATLAB绘制图形。

您的错误如下:

c = (a-b)/2;
您可以初始化
a=20
b=40
<代码>c最初设置为
-10
。但您确实希望
c
介于
a
b
之间,这意味着您希望:

c = (a+b)/2;

尝试在t(i)=对分(f,…)下面添加一行字符i,然后运行该函数。然后,您可以在每次迭代中看到循环计数器被打印到MATLAB命令窗口中。它在做你期望的事情吗?进展真的很慢吗?这说明了什么吗?我实际上是通过添加:
fprintf(“%I”,I)来尝试的
和nothing printsIt不会卡在for循环中,它会卡在while循环中,非常确定。您可以删除for循环,它不会更改行为。你的函数f有根吗?我想这和你的功能有关。。。或者您的初始值选择不正确。确切地说-在对分调用之后立即插入fprintf调用时,没有打印任何内容,这一事实告诉我们,甚至没有一个对分调用完成。因此,这个bug是对分的,正如你后来发现的。我添加了它,它仍然产生相同的结果,没有图表。我的猜测是它被困在for循环中,但我不知道为什么,谢谢。我在复制我的对分法时完全忽略了这一点。