Matlab while循环问题二等分

时间:2018-10-19 19:07:14

标签: matlab

我是MATLAB新手,在分配时遇到问题。分配使用二等分法。我的原始代码是:

order_updates.id

但是,我需要计算它进行的迭代次数,因此我将代码的第二部分(在“二等分”之后)更改为:

a = -0.5;
b = 1.1;
f=@(x) x^5-2*x^4+3*x^3-2*x^2+x-1-cos(30*x);
val1 = f(a);
val2 = f(b);
p1a1 = val1*val2;
save('A1.dat','p1a1','-ascii')

%bisection

for i = 0:100
    c = (a+b)/2;
    if f(c) >= -0.000000001 && f(c) <= 0.000000001
        answer = c;
    elseif f(c) > 0
        b = c;
    else a = c;
    end
end
answer = c;
save('A2.dat','answer','-ascii')

在规定的公差范围内,c表示该功能的零点。但是,新代码将无法运行,而且我似乎无法弄清楚哪里出了问题。抱歉,这很简单

1 个答案:

答案 0 :(得分:1)

您不是在循环内更新c的值,它永远不会改变,这意味着您陷入了while循环中。与之前一样,将c = (a+b)/2定义复制到循环内部。

c = (a+b)/2;
while abs(f(c))>tolerance
    count=count+1;        
    if f(c) > 0
        b = c;
    else
        a = c;
    end
    c = (a+b)/2; % <<<<<< This is needed to avoid an infinite loop!
end
answer = c;

二等分方法可以保证收敛到根(如果存在),但是对于数字方法,请注意使用while循环。特别是,添加一个最大迭代计数器

maxIters = 1000;
c = (a+b)/2;
while abs(f(c)) > tolerance && count < maxIters
    % Code as before ...
end