|
|

楼主 |
发表于 2018-5-8 20:17:33
|
显示全部楼层
e=1e-08
a=int(input('请输入区间左值='))
b=int(input('请输入区间右值='))
M=(5**0.5-1)/2
n=1
def f(x):
return x**2+2*x
print("n a \t b \t x1 \t x2 \t y1 \t y2\n")
def loop(a,b,e,M,n):
x1=a+(1-M)*(b-a)
x2=a+M*(b-a)
y1=f(x1)
y2=f(x2)
print('%d %.4lf\t %.4lf\t %.4lf\t %.4lf\t %.4lf\t %.4lf\n'%(n,a,b,x1,x2,y1,y2))
n=n+1
while True:
if (b-a)<e:
x=(b+a)/2
break
if (y1-y2)<0:
b=x2
x2=x1
y2=y1
x1=a+(1-M)*(b-a)
y2=y1
y1=f(x1)
print('%d %.4lf\t %.4lf\t %.4lf\t %.4lf\t %.4lf\t %.4lf\n'%(n,a,b,x1,x2,y1,y2))
n=n+1
elif (y1-y2)>0:
a=x1
x1=x2
x2=a+M*(b-a)
y1=y2
y2=f(x2)
print('%d %.4lf\t %.4lf\t %.4lf\t %.4lf\t %.4lf\t %.4lf\n'%(n,a,b,x1,x2,y1,y2))
n=n+1
else:
a=x1
b=x2
loop(a,b,e,M,n)
loop(a,b,e,M,n)
分享正确代码 |
|