我有这个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 !!!
非常感谢
答案 0 :(得分:0)
您在此if语句中缺少绝对值:
if abs(f(x0)-f(x1)) < 0.00001
break;
end
如果没有这个,for循环会在到达xn
定义之前中断,而不是因为f(x0)
接近f(x1)
,而是因为结果是否定的。
运行它,你有第二个问题,这些线需要交换,否则它们最终是平等的,这不是你想要的。
x0=xn;
x1=x0;