【计算方法】【数值解】二分法python实现

import math
from fractions import Fraction

def findk():#预估需要迭代的次数
	m1=math.log(b-a,math.e)#ln(b-a)
	m2=math.log(eps,math.e)#ln(eps)
	m3=math.log(2,math.e)#ln2
	global k
	k=math.ceil((m1-m2)/m3)#(ln(b-a)-ln(eps))/ln(2)
	print("迭代需%d次,迭代精度为%f" %(k,eps))

def f(x):
	return 63*math.pow(x,5)-70*math.pow(x,3)+15*x #待迭代函数f(x)

def BisectionMethod():
	global eps
	eps=0.5*math.pow(10,-5)#精度设置
	global a
	global b
	n=0.1 #查找间隔为1
	a=-1;b=a+n;#通过设置a设置查找区间
	flag=0#解的个数
	maxlen=10#ab查找的最大区间
	while(a<(maxlen+2)):#a在查找最大区间内
		while(f(a)*f(b)>0):
			a=a+n#不满足条件就累加
			b=b+n
			if(a>maxlen and flag==0):#没有解的情况
				print("a在%d以内找不到解" %maxlen)
				exit()#退出程序
			if(f(a)*f(b)<0):#满足条件
				flag=flag+1#解的个数加一
				print("找到的第%d个解" %flag)
				print("a=%f,b=%f使得f(a)*f(b)<0" %(a,b))
				findk()#预估需要迭代的次数
				x=(a+b)/2#第一次二分
				print("第1次迭代,x的值为%f,其函数值为%f" %( x , f(x)))
				for k1 in range(k-1):#进行迭代
					print("第%d次迭代:" %(k1+1),end=" ")
					if f(x)*f(b)<0:
						a=x
					else:
						b=x
					x=(a+b)/2
					print("第1次迭代,x的值为%f,其函数值为%f" %( x , f(x)))
				print("经历了%d次迭代,得到解为%.19f,函数值为%.19f"%(k,x,f(x)))
		a=a+n#上一次迭代完成跳过上一解
		b=a+n
		print("\n")

	
if __name__ == "__main__":
	BisectionMethod()#执行二分算法


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a9c93f2300

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值