主程序:
function [k,x,wuca,yx] = newton(x0,tol)
k=1
yx1=fun(x0)
yx2=fun1(x0)
x1=x0-yx1/yx2
while abs(x1-x0)>tol
x0=x1
yx1=fun(x0)
yx2=fun1(x0)
k=k+1
x1=x1-yx1/yx2
end
k
x=x1
wuca=abs(x1-x0)/2
yx=fun(x)
end
分基配程序1:
function y1=fun(x)
y1=sqrt(x^2+1)-tan(x)
end
分程序2:
function y2=fun1(x)
%函数fun(x)的导数
y2=x/(sqrt(x^2+1))-1/((cos(x))^2)
end
结果:
[k,x,wuca,yx] = newton(-1.2,10^-5)
k =8
x =0.9415
wuca =4.5712e-08
yx =-3.1530e-14
[k,x,wuca,yx] = newton(2.0,10^-5)
k 掘大=243
x =NaN
wuca =NaN
yx 搏散指=NaN
function newton(x0,e,N)%输入xo为估计的迭代初值,e为规定的误差,N为最大迭代次誉塌哪数.
%输出x,y为最后迭代的两衫腔个近似根,k为迭代次数.
clc
format long
disp('迭代次数 近庆码似根')
k=0
x1=0
x2=x0
while (abs(x2-x1))>e
x1=x2
x2=x1-f(x1)./df(x1)
k=k+1
if k>N
return
end
%%%%%%记录并输出%%%%%%%%%
o1=sprintf('%3d',k)
o2=sprintf('%3.8f',x2)
OL=[o1,' ' o2]
disp(OL)
y(k)=x2
end
%%%%画图%%%%%%%
i=1:k
figure(2)
plot(i,y,'rD-')
grid on
xlabel('迭代次数')
ylabel('近似根')
title(['牛顿法求出的该方程的近似根 x^*=', num2str(x2,9)])
function y=f(x)
y=x^2/2-sin(x)-1
function y=df(x)
y=x-cos(x)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)