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/07/04 13:54:48
![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)](/uploads/image/z/4729582-46-2.jpg?t=matlab%E7%BC%96%E7%A8%8Bm%E6%96%87%E4%BB%B6%E7%89%9B%E9%A1%BF%E6%B3%95%E6%B1%82%E8%A7%A3%E9%9D%9E%E7%BA%BF%E6%80%A7%E6%96%B9%E7%A8%8B%2Cfunction+newton%28x0%2Cesp%2Cn%29for+k%3D1%3Any%3Dx0-nd%28x0%29%2Fnt%28x0%29%3Bxe%3Dabs%28y-x0%29%3Bif+xe%3Eespx0%3Dy%3Belse+fprintf%28%27x0%3D%25f+xe%3D%25f+k%3D%25d%5Cn%27%2Cx0%2Cxe%2Ck%29break%3Bendendfunction+y%3Dnd%28x%29y%3D%28x-pi%2F2%29%5E2-sin%28x%29-1%3Bfunction+y%3Dnt%28x%29y%3D2%2A%28x-pi%2F2%29)
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