热门标签 | HotTags
当前位置:  开发笔记 > 开放平台 > 正文

多项式牛顿迭代及其运用

[TOC]参考资料"牛顿迭代法在多项式运算的应用byMiskcoo""如何通俗易懂地讲解牛顿迭代法?"前言牛

目录

  • 参考资料
  • 前言-牛顿迭代
    • 实数意义下的
    • 多项式意义下的
  • 多项式对数函数
  • 多项式指数函数
  • 多项式开根
  • 多项式求幂

参考资料

牛顿迭代法在多项式运算的应用-by Miskcoo
如何通俗易懂地讲解牛顿迭代法?

前言-牛顿迭代

在食用本文之前,建议先学习这篇博客:多项式常用操作归纳
同样的,本文还是建议从前往后进行学习~~~

实数意义下的

首先是看了马老师的博客,然后就了解了求不规则函数根的方法。

下面是博主自己的概括和理解:

大概就是随便在x轴上找一个点,然后向上作x轴的垂线,交函数于一点y,然后再作(x,y)处的切线,交x轴于(x',0)。又从(x',0)这个点开始不断地重复。

最终我们找到的交x轴的那个点,有极大的概率是方程的根(函数的零点)。

现在我们来看一下,在已知\((x_0,f(x_0))\)的情况下,如何求出x'的值:
设原函数为\(f(x)\),然后在\((x_0,f(x_0))\)的切线方程为:\(y=f'(x_0)(x-x_0)+f(x_0)\),然后就可以简单的令y=0,就可以得到:\(0=f'(x_0)(x'-x_0)+f(x_0)\)->\(x'=x_0-\frac{f(x_0)}{f'(x_0)}\),然后就可以通过这个式子进行不断地迭代了。

多项式意义下的

这个...其实还没有发现和上面的那个有什么关系...可能是我研究的还不够深入吧...先道个歉...
重点是记住结论就好了
首先看一个式子:
\[G(F(x))\equiv 0(mod\ x^n)\]
已知的是G(x),要求的是F(x)。

咋搞呢?

首先是多项式问题的常见套路:设\(F_0(x)\)是在\(mod\ x^{\lfloor\frac{n}{2}\rfloor}\)意义下的解,而且已经求出来了。
也就是有:
\[G(F_0(x))\equiv 0(mod\ x^{\lfloor\frac{n}{ 2}\rfloor})\]
由泰勒展开可得:
\[G(F(x))=\frac{G(F_0(x))}{0!}+\frac{G'(F_0(x))}{1!}(F(x)-F_0(x))+\frac{G''(F_0(x))}{2!}(F(x)-F_0(x))^2+...\]
然后我们进一步可以发现,其实从式子中的第三项开始就可以省略了。

为什么呢??

因为在高次的情况下满足的式子,低次也是满足的:
\[G(F(x))\equiv 0(mod\ x^{\lfloor\frac{n}{2}\rfloor})\]
进一步也就是说\(F(x)\)\(F_0(x)\)的后n/2位是相等的。
然后你就会发现\((F(x)-F_0(x))\)的最低次项的次数都是(n/2)*(n/2)=n的,在模\(x^(n)\)的意义下,就变成0了!!!
所以说只有前面两项是有意义的。

这样子之后就变得炒鸡简单啦:
\[G(F(x))=\frac{G(F_0(x))}{0!}+\frac{G'(F_0(x))}{1!}(F(x)-F_0(x))\]
然后我们进行进一步的变形,就能够得出F(x)的表达式:
\[F(x)=F_0(x)-\frac{G(F_0(x))}{G'(F_0(x))}\]
特别需要注意的是,这里的F(x)最好是看成是一个变元(通俗地讲,就看成是'x'),在这个意义下在进行求导的运算。

如何具体的使用这个蕴藏着丰富力量的公式呢?
每次都将题目中的同余式化成右边等于0 的形式,然后再令左边等于G(F(x)),再带入上述的结论式中,就能够得到你想要的结论了~~~

下面给出的常见操作大都是使用牛顿迭代得到的,其实也有常规的推导方式,只不过使用牛顿迭代更加简单易懂罢了。

多项式对数函数

这个是用不到牛顿迭代的...这里就先说了。
通常题目都是在模x^n的意义下进行求解的,后面就不再重复了。
题目就是:
\[B(x)\equiv ln(A(x))(mod\ x^n)\]
其中A(x)是已知的,B(x)是我们要求的。

对两边同时求导可得:
\[B'(x)\equiv \frac{A'(x)}{A(x)}(mod\ x^n)\]
然后我们发现后面的那个式子是能够使用之前的方法解决的(求逆+求导)。求导的话,不懂的可以出门百度一下,比较简单。

最后得到B'(x)之后,再积分回来,就能够得到最终的答案了。(积分和求导都是有比较简单的公式的,且是O(n)的)

多项式指数函数

从这里开始就需要用到牛顿迭代了。
我们的问题是:
\[e^{A(x)}\equiv B(x)(mod\ x^n)\]
其中A(x)是已知的,B(x)是我们要求的。

将问题转化一下,就变成了:
\[ln(B(x))\equiv A(x)(mod\ x^n)\]

然后将A(x)移到左边来,就有了:
\[ln(B(x))-A(x)\equiv 0(mod\ x^n)\]

再令\(G(F(x))=ln(B(x))-A(x)\)
最后来一波牛顿迭代,就有了:
\[B(x)=B_0(x)-\frac{ln(B_0(x))-A(x)}{\frac{1}{B_0(x)}}\]
再变一下,就有了:
\[B(x)=B_0(x)(1-ln(B_0(x))+A(x))\]其中\(B_0(x)\)是我们在模\(x^{\lfloor\frac{n}{2}\rfloor}\)意义下已经求得的答案。求ln(B0(x))的话,可以用之前的多项式对数函数搞就可以了。

这里需要特别注意的是,多项式求指数函数是有前提的:A(x)的常数项必须为0,否则在底层的时候B[0]无法赋初值
这样子就有B[0]=1(因为ln(1)=0)。

多项式开根

直接上问题:
\[\sqrt{A(x)}\equiv B(x)(mod\ x^{\frac{n}{2}})\]
其中A(x)已知,B(x)是要求的。
把根号去掉就有:
\[A(x)\equiv B^2(x)(mod\ x^n)\]

然后又用常见的套路:
\[G(F(x))=A(x)-(B(x))^2\]
就有牛顿迭代:
\[B(x)=B_0(x)-\frac{A(x)-(B_0(x))^2}{-2*B_0(x)}\]
化简一下就有:
\[B(x)=\frac{B_0(x)}{2}+\frac{A(x)}{2*B_0(x)}\]
然后就可以做了(求逆就可以了)。

多项式求幂

这个就比较简单(但是也想不到这个思路)。
之前我们就有一个比较简单的一个思路,就是多项式快速幂,是\(O(n\log^2 n)\)的算法。这里利用之前的方法能够优化到\(O(n\log n)\)(但是常数巨大...)。

思路其实就是将\((F(x))^k\)转化为\(e^{k*ln(F(x))}\)
如果觉得不显然的话,展开之后,你就会发现他们是一样的!!!
那就是nlogn了(是不是感觉有点震惊...)。

这里只是草草地将博客赶完了,具体的细节明天再更吧...


推荐阅读
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • qt学习(六)数据库注册用户的实现方法
    本文介绍了在qt学习中实现数据库注册用户的方法,包括登录按钮按下后出现注册页面、账号可用性判断、密码格式判断、邮箱格式判断等步骤。具体实现过程包括UI设计、数据库的创建和各个模块调用数据内容。 ... [详细]
author-avatar
哲玲旭辉9
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有