在matlab中通过割线方法进行函数根查找

时间:2016-03-31 10:36:40

标签: matlab

我有这个matlab代码,用于使用割线方法计算函数的根:

syms x
f=@(x) x.^2-2;
x0=1;
x1=5;
tol=0.01;

for i=1:100

    if (f(x0)-f(x1)) < 0.00001
        break;
    end

xn = x0-((f(x0)*(x0-x1))/(f(x0)-f(x1)));

    if abs(xn-x0) < tol*abs(xn)
       break;
    end
    x0=xn;
    x1=x0;
end


fprintf('the root is %g\n', xn)

当我运行代码时,matlab说:Undefined function or variable 'xn'. 为什么这么说?我确实在代码中定义了xn !!!

非常感谢

1 个答案:

答案 0 :(得分:0)

您在此if语句中缺少绝对值:

if abs(f(x0)-f(x1)) < 0.00001
    break;
end

如果没有这个,for循环会在到达xn定义之前中断,而不是因为f(x0)接近f(x1),而是因为结果是否定的。

运行它,你有第二个问题,这些线需要交换,否则它们最终是平等的,这不是你想要的。

x0=xn;
x1=x0;