牛顿迭代法(Newton's Method)

2024-03-04 02:58
文章标签 method 牛顿 迭代法 newton

本文主要是介绍牛顿迭代法(Newton's Method),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

高次方程没有通解,可以依靠牛顿迭代法来求解。
五次及以上多项式方程没有根式解(就是没有像二次方程那样的万能公式),这个是被伽罗瓦用群论做出的最著名的结论。
但是,没有王屠夫难道非得吃带毛猪?工作生活中还是有诸多求解高次方程的真实需求(比如行星的轨道计算,往往就是涉及到很复杂的高次方程),这日子可怎么过下去啊?
没有根式解不意味着方程解不出来,数学家也提供了很多方法,牛顿迭代法就是其中一种。
https://www.matongxue.com/madocs/205.html

牛顿迭代法在acm中的应用:
1.求解方程的根
枚举初始迭代点求f'(x) = 0 的根
HDU2899

2.开根号
牛顿迭代法相比于二分法,迭代次数更少。
而且在雷神之锤3的源码中还有一个更强大的求1/sqrt(a)的方法,比c++ 标准库快好几倍
其源码如下所示:

float Q_rsqrt( float number )
{long i;float x2, y;const float threehalfs = 1.5F;x2 = number * 0.5F;y   = number;i   = * ( long * ) &y;   // evil floating point bit level hackingi   = 0x5f3759df - ( i >> 1 ); // what the fuck?y   = * ( float * ) &i;y   = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration// y   = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed#ifndef Q3_VM#ifdef __linux__assert( !isnan(y) ); // bk010122 - FPE?#endif#endifreturn y;
}

关于注释为"what the fuck?"的一行,这里有一篇论文:http://www.matrix67.com/data/InvSqrt.pdf
之所以会出现这种奇怪的注释,要么是此段程序的作者(可能是马克尔)根本不知道该如何解释清楚,或者是维护这段程序的程序员完全看不懂这句话,所以有点儿抓毛。而实际上,它的作用(再加上y
= y * ( threehalfs - ( x2 * y * y ) )这句牛顿迭代)就是求平方根。

求解1/sqrt(a) = x     (脑补对任意根号下的解)
1/(x^2) - a = 0
令f(x) = 1/(x^2) - a
f'(x) = -2/(x^3)
xn+1 = xn - f(xn) / f'(xn) = x*(1.5 -0.5a*x^2)
参考雷声之锤(一款游戏)源码,我们得到一个速度更优的求sqrt(a)的方法
 

double Sqrt(float x){double xhalf = 0.5*(double)x;int i = *(int*)&x; // get bits for floating VALUEi = 0x5f375a86- (i>>1); // gives initial guess y0x = *(float*)&i; // convert bits BACK to floatx = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracyx = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracyx = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracyreturn 1.0/(double)x;
}

 https://blog.csdn.net/wubaizhe/article/details/75574798
https://www.cnblogs.com/widsom/p/8857108.html
https://www.2cto.com/kf/201206/137256.html

迭代法求平方根的通式:

最后根据值得精度,跳出迭代得到根 

这篇关于牛顿迭代法(Newton's Method)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/771792

相关文章

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

兔子--The method setLatestEventInfo(Context, CharSequence, CharSequence, PendingIntent) from the type

notification.setLatestEventInfo(context, title, message, pendingIntent);     不建议使用 低于API Level 11版本,也就是Android 2.3.3以下的系统中,setLatestEventInfo()函数是唯一的实现方法。  Intent  intent = new Intent(

Windows用户取消共享文件夹密码方法(Method for Windows Users to Cancel Shared Folder Password)

Windows用户取消访问共享文件夹密码方法 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老 导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监

iOS——方法交换Method Swizzing

什么是方法交换 Method Swizzing是发生在运行时的,主要用于在运行时将两个Method进行交换,我们可以将Method Swizzling代码写到任何地方,但是只有在这段Method Swilzzling代码执行完毕之后互换才起作用。 利用Objective-C Runtimee的动态绑定特性,将一个方法的实现与另一个方法的实现进行交换。交换两个方法的实现一般写在分类的load方法里

element table 表格 span-method 某一列进行相同合并 支持树结构表格

须知 这是 vue2 版本,不过理论上 vue3 也能参考使用 可以直接打开 codepen 查看代码 效果图 代码 打不开 codepen 或者codepen 失效,查看下面代码参考 <script src="//unpkg.com/vue@2/dist/vue.js"></script><script src="//unpkg.com/element-ui@2.15.14/l

A fault diagnosis method of bearings based on deep transfer learning

A fault diagnosis method of bearings based on deep transfer learning 基于深度迁移学习的轴承故障诊断方法 ABSTRACT 近年来,许多深度迁移学习方法被广泛应用于不同工况下的轴承故障诊断,以解决数据分布移位问题。然而,在源域数据差异较大、特征分布不一致的情况下,深度迁移学习方法在轴承故障诊断中的准确率较低,因此本文提出了一种

The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method 已解决

前面有个webSocket自动断开连接的问题,已解决,请见博客: webSocket java.io.EOFException: null 增加心跳机制解决 然后又报了一个错: java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid st

Android 解决 No static method in class La/a/a/a; or its super classes

错误堆栈: Process: com.chaozh.iReader, PID: 24217java.lang.NoSuchMethodError: No static method getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; in class La/a/a/a; or its super

点云配准之ICP和NDT算法的高斯牛顿法求解

ICP算法 NDT算法 代码:https://github.com/taifyang/pointcloud-registration 参考:高翔《自动驾驶与机器人中的SLAM技术》

【机器人学导论】6自由度机械臂逆运动学求解—牛顿法(数值法,仅旋转关节)

我以前是机器人专业,不过学的不多,教程应该是灰色封面的《机器人学导论》。3年前学的了,软件仿真学的是ABB,上手操作是KUKA的机器人。本文是给别人解决问题的记录,写个笔记。代码是matlab的,不免费分享,但是看我的解析应该也能自己写出来。我不从事这个行业,很多东西已经模糊了。 文章目录 一、DH参数二、正向运动学三、逆向运动学3.1 逆向运动学的求解方法:3.11 解析法(Ana