matlab 用牛顿法求解方程

matlab 用牛顿法求解方程,第1张

定义函数

function y=nd(x)

y= 0036-((x/20907)^(1/01585))-x/182000

function y=nd0(x)

y=- (1/01585)(x/20907)^(1/01585-1)(1/20907) - 1/182000

主程序

x=05; %迭代初值

i=0; %迭代次数计数

while i<=100;

y=x-nd(x)/nd0(x); %牛顿迭代格式

if abs(y-x)>10^(-5); %收敛判断

x=y;

else break

end

i=i+1;

end

fprintf('\n%s%4f \t%s%d','x=',x,'i=',i) %输出结果

x=-1005000 i=101

首先,建立原函数的自定义函数文件

function y = fun(x)

y=x^4-3x^3+5cos(x)+8;

其次,建立导函数的自定义函数文件

function y = dfun(x)

y=4x^3-9x^2-5sin(x);

最后,用牛顿法求解

x0=1;tol=1e-6;x1=newton(x0,tol)

n =

   5

x1 =

  1787494463594194

验证:

x1 =    1787494463594194;x1^4-3x1^3+5cos(x1)+8

ans =

 -3552713678800501e-015   (=0)

这样吧,你不要直接通过solve求解啊,可以画一个图像啊,以x的值为横坐标,行列式值为纵坐标,或者纵坐标取一下对数(如果变化范围太大),然后可以得出大致得到解的范围;最后可以通过其他方法计算更加精确的解。

希望能帮到你,我算程序就是这样实现的

% 用牛顿下山法求解方程

function [x,k]=myfun_newton(f,x0,emg)

% f表示非线形方程

% x0迭代初值,此种方法是局部收敛,初值要选择恰当

% emg是精度指标

% k,u分别表示迭代次数和下山因子

% d1表示非线形方程f在x0处的导数值

[f1,d1]=feval(f,x0);

k=1;

x(1)=x(0);

x(2)=x(1)-f1/d1;

while abs(f1)>emg

u=1;

k=k+1;

[f1,d1]=feval(f,x(k));

x(k+1)=x(k)-uf1/d1;

while abs(f2)>abs(f1)

u=u/2;

x(k+1)=x(k)-uf1/d1;

[f2,d2]=feval(f,x(k+1));

end

end

这个收敛速度快,建议给你用下

function s=NewtonIterate(x,eps)

%Newton迭代法求解非线性方程组的解

%x为迭代初值,eps为允许误差

if nargin==1

eps=10e-6;

elseif nargin<1

return

end

x1=fx1(x); %非线性方程组函数fx1m

x2=-dfx1(x); %非线性方程组的导数函数dfx1m

x0=x2\x1';

while norm(x0)>=eps

x=x0'+x;

x1=fx1(x);

x2=-dfx1(x);

x0=x2\x1';

end

s=x0'+x;

return

function y=fx1(x)%函数1

y=x^3-2x-5

function y=dfx1(x)%函数2

y=3x^2-2

%命令行

>> x= NewtonIterate(25,eps)

x =

1307/624

以上就是关于matlab 用牛顿法求解方程全部的内容,包括:matlab 用牛顿法求解方程、牛顿法求解 matlab实现、matlab中牛顿法编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9429100.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存