0

我正在尝试使用 Matlab 中的二分法来查找方程的根,该方程的根在q2000-3000 之间以 10 步间隔变化。但是,即使我有一个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方法并且它确实有效,所以我认为问题不在于该功能。

4

2 回答 2

2

你的错误在这里:

c = (a-b)/2;

您初始化a=20b=40c最初设置为-10。但是你真的想要介于andc之间,这意味着你想要:ab

c = (a+b)/2;
于 2013-10-08T19:13:21.930 回答
0

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

于 2013-10-08T18:29:50.290 回答