matlab中割线法求函数根
我有一个用割线法计算函数根的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;
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语句应该中断。根据您的需求,您可以使用其中一个或两个。