matlab中割线法求函数根

matlab中割线法求函数根,matlab,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;

我有一个用割线法计算函数根的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)
symsx
f=@(x)x.^2-2;
x0=1;
x1=5;
tol=0.01;
对于i=1:100
如果(f(x0)-f(x1))<0.00001
打破
结束
xn=x0-((f(x0)*(x0-x1))/(f(x0)-f(x1));
如果abs(xn-x0)
当我运行代码时,matlab说:
未定义的函数或变量'xn'。
为什么这么说?我确实在代码中定义了xn


非常感谢

此if语句中缺少绝对值:

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

此if语句中缺少绝对值:

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

非常感谢你,兄弟。。。我确实删除了你提到的if语句,它是错误的,我得到了根。。。现在我怎样才能更正你提到的if语句。。是我不需要那个if语句吗?:)不需要删除它,只需添加
abs
,它就可以工作了。如果
f(x0)
大约等于
f(x1)
,第一个if语句就会中断。如果
x1
大约等于
x2
,则第二条if语句应该中断。根据您的要求,您可以使用其中一个或两个。非常感谢您的兄弟。。。我确实删除了你提到的if语句,它是错误的,我得到了根。。。现在我怎样才能更正你提到的if语句。。是我不需要那个if语句吗?:)不需要删除它,只需添加
abs
,它就可以工作了。如果
f(x0)
大约等于
f(x1)
,第一个if语句就会中断。如果
x1
大约等于
x2
,则第二条if语句应该中断。根据您的需求,您可以使用其中一个或两个。