不动点迭代求解方程数值解

求解方程 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



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值