matlab编程m文件牛顿法求解非线性方程,function newton(x0,esp,n)for k=1:ny=x0-nd(x0)/nt(x0);xe=abs(y-x0);if xe>espx0=y;else fprintf('x0=%f xe=%f k=%d\n',x0,xe,k)break;endendfunction y=nd(x)y=(x-pi/2)^2-sin(x)-1;function y=nt(x)y=2*(x-pi/2)
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/23 08:31:00
matlab编程m文件牛顿法求解非线性方程,function newton(x0,esp,n)for k=1:ny=x0-nd(x0)/nt(x0);xe=abs(y-x0);if xe>espx0=y;else fprintf('x0=%f xe=%f k=%d\n',x0,xe,k)break;endendfunction y=nd(x)y=(x-pi/2)^2-sin(x)-1;function y=nt(x)y=2*(x-pi/2)
matlab编程m文件牛顿法求解非线性方程,
function newton(x0,esp,n)
for k=1:n
y=x0-nd(x0)/nt(x0);
xe=abs(y-x0);
if xe>esp
x0=y;
else fprintf('x0=%f xe=%f k=%d\n',x0,xe,k)
break;
end
end
function y=nd(x)
y=(x-pi/2)^2-sin(x)-1;
function y=nt(x)
y=2*(x-pi/2)-cos(x);
这是我写的程序,但是运行的时候,就变成
>> newton(0,1e-4,1000)
y=0.394294 xe=0.000000 k=4
>> newton(1,1e-4,1000)
y=0.394294 xe=0.000000 k=5
xe怎么都是0,题目是这样的:编写M –File函数用牛顿法求出其根,精度为10-4,最大循环次次为1000次,要求打印出最后的根及误差以及循环次数.
matlab编程m文件牛顿法求解非线性方程,function newton(x0,esp,n)for k=1:ny=x0-nd(x0)/nt(x0);xe=abs(y-x0);if xe>espx0=y;else fprintf('x0=%f xe=%f k=%d\n',x0,xe,k)break;endendfunction y=nd(x)y=(x-pi/2)^2-sin(x)-1;function y=nt(x)y=2*(x-pi/2)
原因在这一句:else fprintf('x0=%f xe=%f k=%d\n',x0,xe,k)
其中xe=%f只能输出的精度是0.000000,默认6位仅只小数点后面包含6位.而实际xe=0.0000001139,因此没有看到数字.
改成:xe=%.10f,表示小数位有十个.
结果:xe=0.0000001139