求解方程2x−x3=0
解:可以採用不動點迭代的方式求出數值解。
其不動點是x=3log2x,故可以採用下式進行不動點迭代:
初始值爲x0=2,迭代終止條件是|xn+1−xn|≤100∗np.spacing(1) 其中,np.spacing(1)=2.22044604925e−16
用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