Matlab中的while循环问题

Matlab中的while循环问题,matlab,Matlab,我是MATLAB新手,在一项作业中遇到了一个问题。赋值是使用对分法。我最初的代码是: 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.0000

我是MATLAB新手,在一项作业中遇到了一个问题。赋值是使用对分法。我最初的代码是:

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将在规定公差范围内显示函数的零点。然而,新代码不会运行,我似乎无法找出哪里出了问题。抱歉,如果它很简单

您没有在循环中更新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;

为了避免潜在的无限循环,停止标准必须是| b-a |@PicaudVincent注意@Wolfie是的,确定你是对的,非常感谢。我试图将c放入while循环,但我将它放在顶部,在count=count+1之前。现在它有意义了。另外,感谢您提供有关设置最大迭代次数的有用提示。这无疑将有助于未来的编码@PATT没有问题,考虑把这个答案标记为接受投票按钮上的绿色刻度标记,如果它回答了你的问题!
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;
maxIters = 1000;
c = (a+b)/2;
while abs(f(c)) > tolerance && count < maxIters
    % Code as before ...
end