《编写高质量代码:改善c程序代码的125个建议》——建议12-2:使用牛顿迭代法求除数的倒数

简介:

本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第2章,建议12-2,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

建议12-2:使用牛顿迭代法求除数的倒数

在上一小节,我们阐述了如何使用倒数相乘(x/y=x*(1/y))的方法来实现除法运算。然而,对于如何能够快速有效地取倒数,牛顿迭代法(Newton’s method)是最佳方案。
对于牛顿迭代法,相信学过高等数学的读者并不陌生,它又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法,它将非线性方程线性化,从而得到迭代序列的一种方法。
对于方程f?(x)=0,设x0为它的一个近似根,则函数f?(x)在x0附近截断高次项可用一阶泰勒多项式展开为如下形式:


<a href=https://yqfile.alicdn.com/4e3c3db54bcc11cca3bdd3afe8e1b5d81cc62458.png" >
                    (1)

这样,由式(1)我们可以将f?(x)=0转化为如下形式:


d8d0277a4fe031eedda7b8b4f4f19bcd275678a1
(2)
在这里,我们设f′?(x)≠0,则有:


9dc2bde5beeedc27f2550d36c82bcf5178af31c6
(3)
取x作为原方程新的近似根x1,再代入方程,如此反复,于是就产生了迭代公式:


787077db49e20620da6b933ca0261e6411123d70
(4)
有了迭代公式(4)之后,现在我们继续来看如何用牛顿迭代公式来求倒数,即求除数 a的倒数1/a。
这里我们设f?(x)=-a,式中x为a的倒数,方程 f?(x)=0为一非线性方程。现在把f(x)=0代入牛顿迭代序列式(4)中,就可以得出求倒数的公式,如下所示:
<div style="text-align: center">

450ca30e10e0ae1923ff34ce2016acb7dba6f4b0

相关文章
|
1月前
|
C语言
每天一道C语言编程:求N以内的素数(普通方法+优化方法)
每天一道C语言编程:求N以内的素数(普通方法+优化方法)
19 0
|
1月前
|
安全 编译器 程序员
【C++ 编译时有理算术】理解 C++编译时有理数运算:原理、实践与应用
【C++ 编译时有理算术】理解 C++编译时有理数运算:原理、实践与应用
77 1
|
机器学习/深度学习 人工智能 算法
从频度引发的c语言多重for循环乃至编写算法思路的思考
首先需要声明的是,笔者是一名有C语言基础并正在为考研而复习数据结构的大学生,本篇文章中的for循环代码来自于清华大学严蔚敏教授出版的《数据结构》。 本篇博客适用于初学者理解C语言for循环,多重for循环、数据结构频度、线性代数矩阵等知识点。 整篇文章从频度开始,讲述两个矩阵相乘算法,最后讲述整个算法的设计原理
175 4
从频度引发的c语言多重for循环乃至编写算法思路的思考