<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>牛顿迭代法</title>
	<atom:link href="https://www.aitaocui.cn/tag/246056/feed" rel="self" type="application/rss+xml" />
	<link>https://www.aitaocui.cn</link>
	<description>翡翠玉石爱好者聚集地</description>
	<lastBuildDate>Sun, 27 Nov 2022 13:59:19 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.aitaocui.cn/wp-content/uploads/2022/11/taocui.png</url>
	<title>牛顿迭代法</title>
	<link>https://www.aitaocui.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>牛顿迭代法(在实数域和复数域上近似求解方程的方法)</title>
		<link>https://www.aitaocui.cn/article/358004.html</link>
					<comments>https://www.aitaocui.cn/article/358004.html#respond</comments>
		
		<dc:creator><![CDATA[青姐]]></dc:creator>
		<pubDate>Sun, 27 Nov 2022 13:59:19 +0000</pubDate>
				<category><![CDATA[知识]]></category>
		<category><![CDATA[牛顿迭代法]]></category>
		<guid isPermaLink="false">https://www.aitaocui.cn/?p=358004</guid>

					<description><![CDATA[牛顿迭代法（Newton&#x27;s method）又称为牛顿-拉夫逊（拉弗森）方法（Newton-Raphson method），它是牛顿在17世纪提出的一种在实数域和复数域上...]]></description>
										<content:encoded><![CDATA[</p>
<article>
<p>牛顿迭代法（Newton&#x27;s method）又称为牛顿-拉夫逊（拉弗森）方法（Newton-Raphson method），它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。牛顿迭代法是求方程根的重要方法之一，其最大优点是在方程f(x) = 0的单根附近具有平方收敛，而且该法还可以用来求方程的重根、复根，此时线性收敛，但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。</p>
</article>
<p><img decoding="async" src="https://www.aitaocui.cn/wp-content/uploads/2022/08/20220828_630b87c628529.png" /></p>
<article>
<h1>产生背景</h1>
<p>牛顿迭代法（Newton&#x27;s method）又称为牛顿-拉夫逊（拉弗森）方法（Newton-Raphson method），它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式，因此求精确根非常困难，甚至不可能，从而寻找方程的近似根就显得特别重要。方法使用函数f(x）的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一，其最大优点是在方程f(x) = 0的单根附近具有平方收敛，而且该法还可以用来求方程的重根、复根，此时线性收敛，但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。</p>
<h1>牛顿迭代公式</h1>
<div></div>
<p>设r是</p>
<p>的根，选取</p>
<p>作为r的初始近似值，过点</p>
<p>做曲线</p>
<p>的切线L，L的方程为</p>
<p>，求出L与x轴交点的横坐标</p>
<p>，称x为r的一次近似值。过点</p>
<p>做曲线</p>
<p>的切线，并求该切线与x轴交点的横坐标</p>
<p>，称</p>
<p>为r的二次近似值。重复以上过程，得r的近似值序列，其中，</p>
<p>称为r的</p>
<p>次近似值，上式称为。</p>
<div></div>
<p>用牛顿迭代法解非线性方程，是把非线性方程</p>
<p>线性化的一种近似方法。把</p>
<p>在点</p>
<p>的某邻域内展开成泰勒级数</p>
<p>，取其线性部分（即泰勒展开的前两项），并令其等于0，即</p>
<p>，以此作为非线性方程</p>
<p>的近似方程，若</p>
<p>，则其解为</p>
<p>， 这样，得到牛顿迭代法的一个迭代关系式：</p>
<p>。</p>
<p>已经证明，如果是连续的，并且待求的零点是孤立的，那么在零点周围存在一个区域，只要初始值位于这个邻近区域内，那么牛顿法必定收敛。 并且，如果不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说，这意味着每迭代一次，牛顿法结果的有效数字将增加一倍。</p>
<p>军人在进攻时常采用交替掩护进攻的方式，若在数轴上的点表示A，B两人的位置，规定在前面的数大于后面的数，则是A&gt;B，B&gt;A交替出现。但现在假设军中有一个胆小鬼，同时大家又都很照顾他，每次冲锋都是让他跟在后面，每当前面的人占据一个新的位置，就把位置交给他，然后其他人再往前占领新的位置。也就是A始终在B的前面，A向前迈进，B跟上，A把自己的位置交给B（即执行B = A），然后A 再前进占领新的位置，B再跟上，直到占领所有的阵地，前进结束。像这种两个数一前一后逐步向某个位置逼近的方法称为迭代法。</p>
<p>迭代法也称辗转法，是一种不断用变量的旧值递推新值的过程，跟迭代法相对应的是直接法（或者称为一次解法），即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点，让计算机对一组指令（或一定步骤）重复执行，在每次执行这组指令（或这些步骤）时，都从变量的原值推出它的一个新值。</p>
<p>利用迭代算法解决问题，需要做好以下三个方面的工作：</p>
<p>一、确定迭代变量</p>
<p>在可以用迭代算法解决的问题中，至少存在一个可直接或间接地不断由旧值递推出新值的变量，这个变量就是迭代变量。</p>
<p>二、建立迭代关系式</p>
<p>所谓迭代关系式，指如何从变量的前一个值推出其下一个值的公式（或关系）。迭代关系式的建立是解决迭代问题的关键，通常可以使用递推或倒推的方法来完成。</p>
<p>三、对迭代过程进行控制</p>
<p>在什么时候结束迭代过程？这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地执行下去。迭代过程的控制通常可分为两种情况：一种是所需的迭代次数是个确定的值，可以计算出来；另一种是所需的迭代次数无法确定。对于前一种情况，可以构建一个固定次数的循环来实现对迭代过程的控制；对于后一种情况，需要进一步分析得出可用来结束迭代过程的条件。</p>
<h1>示例</h1>
<h2 id="a-f1987518">欧几里德算法</h2>
<p>最经典的迭代算法是欧几里德算法，用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理：</p>
<p>定理：gcd(a,b) = gcd(b,a mod b)</p>
<p>证明：a可以表示成a = kb + r，则r = a mod b。假设d是a,b的一个公约数，则有 a%d==0,b%d==0，而r = a &#8211; kb，因此r%d==0 ，因此d是(b,a mod b)的公约数</p>
<p>同理，假设d 是(b,a mod b)的公约数，则 b%d==0,r%d==0 ，但是a = kb +r ，因此d也是(a,b)的公约数。</p>
<p>因此(a,b)和(b,a mod b)的公约数是一样的，其最大公约数也必然相等，得证。</p>
<p>欧几里德算法就是根据这个原理来做的，欧几里德算法又叫辗转相除法，它是一个反复迭代执行，直到余数等于0停止的步骤，这实际上是一个循环结构。其算法用C语言描述为：</p>
<p>int Gcd_2(int a,int b)/*欧几里德算法求a,b的最大公约数*/</p>
<p>{</p>
<p>if (a&lt;=0 || b&lt;=0)/*预防错误*/</p>
<p>return 0;</p>
<p>int temp;</p>
<p>while (b &gt; 0)/*b总是表示较小的那个数，若不是则交换a，b的值*/</p>
<p>{</p>
<p>temp = a % b;/*迭代关系式*/</p>
<p>a = b;</p>
<p>b = temp;</p>
<p>}</p>
<p>return a;</p>
<p>}</p>
<p>从上面的程序我们可以看到a，b是迭代变量，迭代关系是temp = a % b；根据迭代关系我们可以由旧值推出新值，然后循环执a = b; b = temp；直到迭代过程结束（余数为0）。在这里a好比那个胆小鬼，总是从b手中接过位置，而b则是那个努力向前冲的先锋。</p>
<h2 id="a-9d3fd98d">斐波那契数列</h2>
<p>还有一个很典型的例子是斐波那契（Fibonacci）数列。斐波那契数列为：0、1、1、2、3、5、8、13、21、…，即 fib⑴=0; fib⑵=1;fib(n)=fib(n-1)+fib(n-2) （当n&gt;2时）。</p>
<p>在n&gt;2时，fib(n)总可以由fib(n-1)和fib(n-2)得到，由旧值递推出新值，这是一个典型的迭代关系，所以我们可以考虑迭代算法。</p>
<p>int Fib(int n) //斐波那契（Fibonacci）数列</p>
<p>{</p>
<p>if (n &lt; 1）/*预防错误*/</p>
<p>return 0;</p>
<p>if (n == 1 || n == 2)/*特殊值，无需迭代*/</p>
<p>return 1;</p>
<p>int f1 = 1,f2 = 1,fn;/*迭代变量*/</p>
<p>int i;</p>
<p>for(i=3; i&lt;=n; ++i)/*用i的值来限制迭代的次数*/</p>
<p>{</p>
<p>fn = f1 + f2; /*迭代关系式*/</p>
<p>f1 = f2;//f1和f2迭代前进，其中f2在f1的前面</p>
<p>f2 = fn;</p>
<p>}</p>
<p>return fn;</p>
<p>}</p>
<h1>C语言代码</h1>
<p>double func(double x) //函数</p>
<p>{</p>
<p>return x*x*x*x-3*x*x*x+1.5*x*x-4.0;</p>
<p>}</p>
<p>double func1(double x) //导函数</p>
<p>{</p>
<p>return 4*x*x*x-9*x*x+3*x;</p>
<p>}</p>
<p>int Newton(double *x,double precision,int maxcyc) //迭代次数</p>
<p>{</p>
<p>double x1,x0;</p>
<p>int k;</p>
<p>x0=*x;</p>
<p>for(k=0;k</p>
<p>{</p>
<p>if(func1(x0)==0.0)//若通过初值，函数返回值为0</p>
<p>{</p>
<p>printf(&quot;迭代过程中导数为0!//n&quot;);</p>
<p>return 0;</p>
<p>}</p>
<p>x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算</p>
<p>if(fabs(x1-x0)</p>
<p>{</p>
<p>*x=x1; //返回结果</p>
<p>return 1;</p>
<p>}</p>
<p>else //未达到结束条件</p>
<p>x0=x1; //准备下一次迭代</p>
<p>}</p>
<p>printf(&quot;迭代次数超过预期！//n&quot;); //迭代次数达到，仍没有达到精度</p>
<p>return 0;</p>
<p>}</p>
<p>int main()</p>
<p>{</p>
<p>double x,precision;</p>
<p>int maxcyc;</p>
<p>printf(&quot;输入初始迭代值x0:&quot;);</p>
<p>scanf(&quot;%lf&quot;,&amp;x);</p>
<p>printf(&quot;输入最大迭代次数：&quot;);</p>
<p>scanf(&quot;%d&quot;,&amp;maxcyc);</p>
<p>printf(&quot;迭代要求的精度：&quot;);</p>
<p>scanf(&quot;%lf&quot;,&amp;precision);</p>
<p>if(Newton(&amp;x,precision,maxcyc)==1） //若函数返回值为1</p>
<p>printf(&quot;该值附近的根为：%lf//n&quot;,x);</p>
<p>else //若函数返回值为0</p>
<p>printf(&quot;迭代失败！//n&quot;);</p>
<p>getch();</p>
<p>return 0;</p>
<p>}</p>
<h1>matlab代码</h1>
<h2 id="a-757008a2">定义函数</h2>
<p>function y=f(x)</p>
<p>y=f(x）；%函数f(x）的表达式</p>
<p>end</p>
<p>function z=h(x)</p>
<p>z=h(x）；%函数h(x）的表达式</p>
<p>end</p>
<h2 id="a-73756e00">主程序</h2>
<p>x=X;%迭代初值</p>
<p>i=0;%迭代次数计算</p>
<p>while i&lt;= 100%迭代次数</p>
<p>x0=X-f(X)/h(X);%牛顿迭代格式</p>
<p>if abs(x0-X)&gt;0.01；%收敛判断</p>
<p>X=x0;</p>
<p>else break</p>
<p>end</p>
<p>i=i+1;</p>
<p>end</p>
<p>fprintf(&#x27;//n%s%.4f//t%s%d&#x27;，&#x27;X=&#x27;，X，&#x27;i=&#x27;，i) %输出结果</p>
<h1>Python代码</h1>
<div></div>
<p>Python代码以实例展示求解f(x) = (x-3）**3，f(x) = 0 的根。</p>
<p>def f(x):</p>
<p>return (x-3）**3 ’&#x27;&#x27;定义f(x) = (x-3）**3&#x27;&#x27;&#x27;</p>
<p>def fd(x):</p>
<p>return 3*((x-3）**2） ’&#x27;&#x27;定义f&#x27;(x) = 3*((x-3）**2）</p>
<p>def newtonMethod(n,assum):</p>
<p>time = n</p>
<p>x = assum</p>
<p>Next = 0</p>
<p>A = f(x)</p>
<p>B = fd(x)</p>
<p>print(&#x27;A = &#x27; + str(A) + &#x27;,B = &#x27; + str(B) + &#x27;,time = &#x27; + str(time))</p>
<p>if f(x) == 0.0:</p>
<p>return time,x</p>
<p>else:</p>
<p>Next = x &#8211; A/B</p>
<p>print(&#x27;Next x = &#x27;+ str(Next))</p>
<p>if A == f(Next): print(&#x27;Meet f(x) = 0,x = &#x27; + str(Next)) ’&#x27;&#x27;设置迭代跳出条件，同时输出满足f(x) = 0的x值&#x27;&#x27;&#x27;</p>
<p>else:</p>
<p>returnnewtonMethod(n+1,Next)</p>
<p>newtonMethod(0,4.0) ’&#x27;&#x27;设置从0开始计数，x0 = 4.0&#x27;&#x27;&#x27;</p>
</article>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aitaocui.cn/article/358004.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
