25.5 matlab里面的10中优化方法介绍——牛顿法(matlab程序)

奋斗吧
奋斗吧
擅长邻域:未填写

标签: 25.5 matlab里面的10中优化方法介绍——牛顿法(matlab程序)

2023-07-28 18:23:36 86浏览

+R_{n}(x)f(x),取其线性部分 (即泰勒展开的前两项),并令其等于 0 ,即 f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) = 0 f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)=0f(x。方法使用函数 f ( x ) f(x)f(x) 的泰勒级数的前面几项来寻找方程 f ( x ) = 0 f(x)=0f(x)=0 的根。%目标函数的梯度函数。,称 x 2 x_{2}x。

1.简述

      

1 牛顿法简介
牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

多数方程不存在求根公式,因此求精确根非常困难,甚至不可解,从而寻找方程的近似根就显得特别重要。方法使用函数 f ( x ) f(x)f(x) 的泰勒级数的前面几项来寻找方程 f ( x ) = 0 f(x)=0f(x)=0 的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程 f ( x ) = 0 f(x)=0f(x)=0 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线 性收㪉。另外该方法广泛用于计算机编程中。

2 牛顿法原理
设 r rr 是 f ( x ) = 0 f(x)=0f(x)=0 的根,选取 x 0 x_{0}x 
0

作为 r rr 的初始近似值,过点 ( x 0 , f ( x 0 ) ) \left(x_{0}, f\left(x_{0}\right)\right)(x 
0

 ,f(x 
0

 )) 做曲线 y = f ( x ) y=f(x)y=f(x) 的切线 L LL ,
L : y = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) L: y=f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)L:y=f(x 
0

 )+f 

 (x 
0

 )(x−x 
0

 ) ,则 L LL 与 x xx 轴交点的横坐标 x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_{1}=x_{0}-\frac{f\left(x_{0}\right)}{f^{\prime}\left(x_{0}\right)}x 
1

 =x 
0

 − 
  为 r rr 的一次近似值。过点 ( x 1 , f ( x 1 ) ) \left(x_{1}, f\left(x_{1}\right)\right)(x 
1

 ,f(x 
1

 )) 做曲线 y = f ( x ) y=f(x)y=f(x) 的切线,并求该切线与 × \times× 轴交点的横坐标 x 2 = x 1 − f ( x 1 ) f ′ ( x 1 ) x_{2}=x_{1}-\frac{f\left(x_{1}\right)}{f^{\prime}\left(x_{1}\right)}x 
2

 =x 
1

 − 


 (x 
1

 )
f(x 
1

 )

  ,称 x 2 x_{2}x 
2

  为 r \mathrm{r}r 的二次近似值。重曷 以上过程,得 r rr 的近似值序列,其中, x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_{n}-\frac{f\left(x_{n}\right)}{f^{\prime}\left(x_{n}\right)}x 
  称为 r rr 的 n + 1 n+1n+1 次近似值,上式称为牛顿迭代公式。

用牛顿迭代法解非线性方程,是把非线性方程 f ( x ) = 0 f(x)=0f(x)=0 线性化的一种近似方法。把 f 
  的桌邻域内展开成泰勒 级数 f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) ( x − x 0 ) 2 2 ! + ⋯ + f ( n ) ( x 0 ) ( x − x 0 ) n n ! + R n ( x ) f(x)=f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)+\frac{f^{\prime \prime}\left(x_{0}\right)\left(x-x_{0}\right)^{2}}{2 !}+\cdots+\frac{f^{(n)}\left(x_{0}\right)\left(x-x_{0}\right)^{n}}{n !}+R_{n}(x)f(x),取其线性部分 (即泰勒展开的前两项),并令其等于 0 ,即 f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) = 0 f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)=0f(x 
,以此作为非线性方程 f ( x ) = 0 f(x)=0f(x)=0 的近似方程, 若 f ′ ( x 0 ) ≠ 0 f^{\prime}\left(x_{0}\right) \neq 0f 
则其解为 x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_{1}=x_{0}-\frac{f\left(x_{0}\right)}{f^{\prime}\left(x_{0}\right)}x 
这样,得到牛顿迭代法的一个朱代关系式: x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_{n}-\frac{f\left(x_{n}\right)}{f^{\prime}\left(x_{n}\right)}x  。

已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那 么牛顿法必定收敛。并且,如果不为 0 , 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每造代一次,牛顿法结果的有效 数字将增加一倍。

2.代码

主程序:

%%   用牛顿法求最优化解
f1205 = inline('x(1)*(x(1)-5-x(2))+x(2)*(x(2)-4)','x');%目标函数
grad=inline('[2*x(1)-5-x(2),-x(1)+2*x(2)-4]','x'); %目标函数的梯度函数
x0 = [-8;-8]; 
options=optimset('TolX',1e-4,'TolFun',1e-9,'MaxIter',100);
xo = fsolve(grad,x0,options) %用fsolve求解非线性方程零点
yo=f1205(xo)

3.运行结果

 

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695