非线性方程解法

非线性方程解法非线性方程解法 迭代 求解非线性方程

大家好,欢迎来到IT知识分享网。

          背景:一般线性方程如y=x+1,给出某个x便可得到某个·确定的数值y,给出某个y也可轻松得到x,但是对于非线性方程来说则较为麻烦。(线性方程就是最高次数为1的方程,图像是一条直线一样,非线性就是曲线,最高次数大于1)

         如y=x^3-x-1,给出y=2,想求出x就比较麻烦了。但我们有计算机,可以借助计算机来求解。

定理1:根的存在性定理:若函数f(x)在区间(a,b)上连续,且f(a),f(b)异号(一正一负),则存在一个m\epsilon (a,b),f(m)=0.

   方法1:以y=x^3-x-1为例,若y=2,即求x^3-x-1=2的解。

  调整一下方程,即求x^3-x-3=0的解,设f(x)=x^3-x-3,也就说我们要求f(x)=0的解。

 简单带入x=1,f(1)=-3,x=2,f(2)=3,那么根据定理,在区间(1,2)上,就有一个点可以使得f(x)=0,这个点也就是我们要求的点。

  首先我们可以遍历区间中的所有数,试一下看看哪个数可以达到我们的要求。(假设取三位有效小数,f(x)误差小于0.003),

伪代码:for(t=1; 非线性方程解法0.003″>;t++);

找到合适的t,满足f(1+t*0.001)<=0.003即可,那么这个1+t*0.001就是我们要找的解。

方法2;二分法:相当于方法1,若这个解在比较后的位置,那么需要运算的步骤会比较多,所以可用二分法来查找这个解。

二分法简要叙述:例题还是如上,我们要找在1到2之间的那个答案,那我们算一下发现f(1.5)=-1.125,而f(1)=-3,f(2)=3,那么f(1.5),f(2)异号,1.5和2之间有我们需要的解,那我们可以在1.5到2之间去找了,继续下来,1.5和2的中间是1.75,算一下发现f(1.75)=0.609375,那么解又可以确定在1.5到1.75之间,一直这样进行下去,就可以找到某个点m,满足\left |f(m) \right |<=0.003,那这里m就是我们要找的点。

伪代码:

a=1,b=2,m=(a+b)/2

while(非线性方程解法0.003″>)

{ if(  f(m)<0 )  a=m;

else b=m;      //f(m)<0说明和区间左边值是同号,那么变为新的区间的左边,否则 f(m)>0,那么说明和右边同号,m变为新的右边,,,没有等于0的情况,等于0已经在判断时结束了。

m=(a+b)/2;}

            后续未完,敬请期待,如有错误,烦请指教。

定义1:若数列\left \{ x_n \right \}有极限,收敛于a,则对任意的非线性方程解法0″>,存在N,使得当非线性方程解法N”>时,有\left | x_n-a \right |<\delta

(简单来说就是n非常大的时候,x_n和a非常接近,几乎相等,那么x_{n+1}和a也非常接近,几乎相等,那么x_{n+1}x_n也非常接近,几乎相等)

  方法3:迭代法:假设有个方程x=g(x)需要我们求解,若我们把它变成数列的递推公式,变成x_{n+1}=g(x_n),那我们由此就可以得到一个数列\left \{ x_n \right \},如果这个数列收敛于某个数a,那么x_nx_{n+1}就会接近于a,那么有x_{n+1}=g(x_n)就相当于有a=g(a)成立,那么这个a就是我们方程的解。

    所以我们要求出方程的解就是求a,而a是数列的极限,那我们就变成要求数列的极限,而求数列的极限, 我们这里用我们刚才定义里面内容,n非常大时,x_nx_{n+1}非常接近,且他们两个和a也非常接近。而我们是知道数列的递推公式是x_{n+1}=g(x_n),那么我们就可以求出数列的每一项,直到当某两项非常接近的时候,我们就知道这两项应该就是我们要找的x_nx_{n+1},他们的值就是我们要找的极限。

同样的, 以y=x^3-x-1为例,若y=2,求x,即求x^3-x-1=2的解。即求x^3-x-3=0的解。

          把方程变换为x^3=x+3,那么,x=\sqrt[3]{x+3},那我们就有递推公式x_{n+1}=\sqrt[3]{x_n+3}.

 由上面我们也知道这个解大概在1.5到1.75之间,那么我们迭代不妨从1.5开始.

伪代码:xn=1.5, xm=g(xn);

 while(  |xn-xm|>0.001 )

   {  xn=xm; xm=g(xn);}  //那么当xn和xm的差的绝对值小于0.001时,我们就可以认为这时候他两这个就是极限。(差值小于0.001只是本次举例,不代表实际要求,这时候取xn是极限或者xm是极限或者他们的平均是极限都可以,看情况决定)

   有人可能会把上述例题方程变换为x=x^3-1,从而得到递推公式x_{n+1}=x_n^3-1,这样去试发现似乎得不到我们想要的结果。那是因为我们是去求数列的极限,那前提数列就是数列要有极限,也就说我们的数列要收敛才会有极限,才能解出来。这就于我们构造这个递推公式相关了。

     那也就是说我们需要让递推公式推出的数列收敛才行。那什么样的递推公式才能让数列收敛呢?

    定理2:在区间\left [ a,b \right ]上,g(x)满足以下两个条件:

      1,对任意的x\epsilon \left [ a,b \right ],有a\leqslant g(x)\leqslant b.

       2,存在一个正常数L<1,使得对任意的m,n\epsilon \left [ a,b \right ]

                      有\left | g(n-g(m)\right |\leqslant L\left | n-m \right |

满足这样条件的g(x),就能在区间\left [ a,b \right ]上构造出收敛的数列。(在区间a到b是因为初始数据x_0对递推也有影响,影响他的递推快慢,同时,递推数列性质在不满足条件的区间,性质就不一样了,数列就一定不收敛了。感兴趣更进一步可以自主学习数值分析内容,也可与博主交流,互相学习。)

  牛顿迭代法:由泰勒公式我们知道在某一个点展开f(x),假设在x_n这个点展开f(x),可以得到f(x)\approx f(x_n)+f^`(x_n)*(x-x_n) . 若我们要求方程f(x)=0的解,就相当于我们要求f(x_n)+f^`(x_n)*(x-x_n)=0  的解。

整理式子可得  f^`(x_n)*(x-x_n)=-f(x_n)

                        x-x_n=-\frac{f(x_n)}{f^`(x_n)}

                        x=x_n-\frac{f(x_n)}{f^`(x_n)}

那么我们可以得到递推公式x_{n+1}=x_n-\frac{f(x_n)}{f^`(x_n)}  ,这就是牛顿递推公式,牛顿迭代法就是按照此公式来递推计算极限。

 后续未完,敬请期待,如有错误,烦请指教。

  

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136654.html

(0)
上一篇 2025-06-25 21:15
下一篇 2025-06-25 21:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信