用牛顿法计算根号a的Matlab 程序.急.

用牛顿法计算根号a的Matlab 程序.急.,第1张

function root=NewtonRoot(f,a,b,eps)% 用牛顿法求方程的一个根% 方程的表达式:f% 区间的陆亩颤左端早败点:a% 区间的右端点b% 根的精度:eps% 求得的根耐历:rootif(nargin==3)eps=1.0e-4endf1=subs(sym(f),findsym(sym(f)),a)...

主程序:

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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12543514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存