不動點迭代求解方程數值解

求解方程2xx3=0

解:可以採用不動點迭代的方式求出數值解。

其不動點是x=3log2x,故可以採用下式進行不動點迭代:

xn+1=3log2xn

初始值爲x0=2,迭代終止條件是|xn+1xn|100np.spacing(1) 其中,np.spacing(1)=2.22044604925e16

用python計算,迭代44步收斂,得到的解爲9.93953514143

#coding=utf8                                                                                                                                                  
"""
# Author: waleking
# Created Time : 三  6/27 20:06:16 2012
  Last Modified: 三  6/27 21:49:42 2012
# File Name: fixedpoint.py
# Description:
不動點迭代方法
如,解2^x-x^3=0,即解x=3ln(x)/ln(2)
迭代過程:x(n+1)=3ln(x(n))/ln(2)
        初始值選擇爲x(0)=1
        迭代終止條件爲|x(n+1)-x(n)|<=100*np.spacing(1)
收斂性說明:當初始值小於1.4的時候,不動點迭代不收斂;當初始值大於1.4時,不動點迭代收斂
"""

import numpy as np
import matplotlib.pylab as plt 

xlist=list()
#初始值x0=2
x=2
xlist.append(x)
while(1):
        y=3*np.log2(x)
        xlist.append(y)
        if(np.linalg.norm(y-x)<100*np.spacing(1)):
                break
        else:
                x=y 
print("solution of 2^x-x^3=0 is %s" % x)
print("value of 2^x-x^3 is %s*%s" % ((np.power(2,x)-np.power(x,3))/(np.spacing(1)),np.spacing(1)))
print("iteration procedure is %s" % xlist)
plt.plot(xlist,np.power(2,xlist),"ok-")
plt.plot(xlist,np.power(xlist,3),"*r-")
base=np.linspace(2,10,1000)
plt.plot(base,np.power(2,base),"g-")
plt.plot(base,np.power(base,3),"b-")
plt.show()


如下圖,藍色爲y=x^3,綠色爲y=2^x,最終的結果爲9.93953514143



發佈了135 篇原創文章 · 獲贊 12 · 訪問量 111萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章