黄金分割法
python练习
import math
def f(x):
return x**3-3*x+1
def golds(a,b,delta,epsilon):
t = (math.sqrt(5)-1)/2
h = b - a
fb = f(b)
fa = f(a)
p = a+(1-t)*h
q = a+t*h
fp = f(p)
fq = f(q)
g = []
k = 1
g.append([a, p, q, b])
while(abs(fb-fa)>epsilon or (h>delta)):
if(fp<fq):
b = q
fb = fq
q = p
fq = fp
h = b - a
p = a + (1 - t) * h
fp = f(p)
else:
a = p
fa = fp
p = q
fp = fq
h = b - a
q = a + t * h
fq = f(q)
k = k + 1
g.append([a, p, q, b])
ds = abs(b - a)
df = abs(fb - fa)
if(fp<=fq):
s = p
fs = fp
else:
s = q
fs = fq
E = [ds,df]
print(g)
print(E)
print(k)
print(ds)
print(df)
if __name__ == '__main__':
a = golds(0, 5, 1e-4, 1e-5)
print(a)