ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

牛顿迭代法

2022-04-19 21:31:18  阅读:194  来源: 互联网

标签:方程 frac 迭代 牛顿 tag 迭代法 kx


牛顿迭代法

求近似解

概念

牛顿法又称为牛顿-拉弗森方法,它是一种在实数域和复数域上近似求解方程的方法。方法使用函数\(f(x)\)的泰勒级数的前面几项来寻找方程\(f(x)=0\)的根。

注意:牛顿法只能逼近解,不能计算精确解。

原理

利用泰勒公式,在\(x_0\)处展开,展开到一阶,即:

\[f(x)=f(x_0)-f^{'}(x_0)(x-x_0) \tag{1} \]

令\(f(x)=0\),就是我们要找的方程的解,即:

\[x_1=x_0-\frac{f(x_0)}{f^{'}(x_0)} \tag{2} \]

同理,在\(x_1\)处展开,则:

\[x_2=x_1-\frac{f(x_1)}{f^{'}(x_1)} \tag{3} \]

依次计算,最终的根将无线逼近方程的解:

\[x_{n+1}=x_n-\frac{f(x_n)}{f^{'}(x_n)} \tag{4} \]

开二次方

要求常数\(a\)的近似解,我们可以构造函数,\(f(x)=x^2-a\),\(f^{'}(x)=2x\),则原来的牛顿迭代式为:

\[\Rightarrow x_{n+1}=x_n-\frac{x^2_n-a}{2x_n}=\frac{1}{2}(x_n+a/x_n) \tag{5} \]

给方程一个迭代初始值,\(x_0=a\),然后依次迭代求得方程近似解。

注意:初始化为负数可能会出现负数。

代码

public static double static sqrt(double a){
    if(a<0) return Double.NAN;
    double e=1e-7;
    double t=a;
    while(Math.abs(t*t-a)>e)
    {
        t=(a/t+t)/2.0;
    }
    return t;
}

拓展

牛顿法开\(k\)次方,构造函数\(f(x)=x^k-a\),\(f^{'}(x)=kx^{k-1}\),则牛顿迭代式为:

\[x_{n+1}=x_n-\frac{x^k_n-a}{kx^{k-1}_n}=\frac{k-1}{k}x_n+\frac{a}{kx^{k-1}_n} \tag{6} \]

(1) 牛顿法

优化算法

除了经常被提起的梯度下降法,牛顿法也是机器学习中用的比较多的一种优化算法,牛顿法的速度很快,而且能高度逼近最优值。

求解优化函数\(f(x)\),转化为求\(f^{'}(x)=0\)的解。

对\(x_k\)点进行泰勒展开,具体展开到二阶:

\[f(x)=f(x_k)+f^{'}(x_k)(x-x_k)+ \frac{1}{2}f^{''}(x_k)(x-x_k)^2 \tag{7} \]

函数两边同时对\(x\)求导,并令\(f^{'}(x)\):

\[f^{'}(x)=f^{'}(x_k)+f^{''}(x_k)(x-x_k)=0 \tag{8} \]

\[\Rightarrow x=x_k-\frac{f^{'}(x_k)}{f^{''}(x_k)} \tag{9} \]

公式(9)就是牛顿迭代更新公式。

标签:方程,frac,迭代,牛顿,tag,迭代法,kx
来源: https://www.cnblogs.com/libraxionghao/p/16167467.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有