Powell's

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 2

from sympy import symbols,solve

x1,x2,lam=symbols('x1,x2,lam')
F=x1-x2+2*x1**2+2*x1*x2+x2**2
print("Enter the initial guess")
kp=[]
FF=[]
a=int(input())
b=int(input())
eps=float(input("Enter the probe length: "))
S=[(0,1,0,1),(1,0,1,0)]
f1=F.subs([(x1,a),(x2,b)])
print(f1)
f=f1+1
for i in range(0,3):
print("\nStep-",i+1)
f=f1
f2=F.subs([(x1,a+eps*S[0][i]),(x2,b+eps*S[1][i])])
f3=F.subs([(x1,a-eps*S[0][i]),(x2,b-eps*S[1][i])])
print("f1=",f1)
print("f2=",f2)
print("f3=",f3)
if f2<f1:
print("S(i) is the correct direction for decreasing the value")
f4=F.subs([(x1,a+lam*S[0][i]),(x2,b+lam*S[1][i])])
print(f4)
F4=f4.diff(lam)
sol=solve(F4)
print("lambda =",sol)
X2=(a+sol[0]*S[0][i],b+sol[0]*S[1][i])
kp.append(X2)
print("X",i+2,"=",X2)
a=a+sol[0]*S[0][i]
b=b+sol[0]*S[1][i]
f1=F.subs([(x1,a),(x2,b)])
FF.append(f1)
elif f3<f1:
print("-S(i) is the correct direction for decreasing the value")
f4=F.subs([(x1,a-lam*S[0][i]),(x2,b-lam*S[1][i])])
print(f4)
F4=f4.diff(lam)
sol=solve(F4)
print("lambda =",sol)
X2=(a-sol[0]*S[0][i],b-sol[0]*S[1][i])
kp.append(X2)
print("X",i+2,"=",X2)
a=a-sol[0]*S[0][i]
b=b-sol[0]*S[1][i]
f1=F.subs([(x1,a),(x2,b)])
FF.append(f1)
else:
print("xi has minimum along the direction Si.")
print("all function's in list ",FF)
sp=(kp[2][0]-kp[0][0],kp[2][1]-kp[0][1])
print('\n')
print("cycle 2 :pattern search")
print("1st pattern direction sp is ",sp)
f5=F.subs([(x1,kp[2][0]+eps*sp[0]),(x2,kp[2][1]+eps*sp[1])])
f6=F.subs([(x1,kp[2][0]-eps*sp[0]),(x2,kp[2][1]-eps*sp[1])])
print("f4",FF[2])
print("f4+",f5)
print("f4-",f6)
if f5<FF[2]:
print("S(i) is the correct direction for decreasing the value")
f7=F.subs([(x1,kp[2][0]+lam*sp[0]),(x2,kp[2][1]+lam*sp[1])])
print(f7)
F4=f7.diff(lam)
sol=solve(F4)
print("lambda =",sol)
X2=(kp[2][0]+sol[0]*sp[0],kp[2][1]+sol[0]*sp[1])
print("X5=",X2)
f1=F.subs([(x1,kp[2][0]+sol[0]*sp[0]),(x2,kp[2][1]+sol[0]*sp[1])])
print("f5",f1)
elif f3<f1:
print("-S(i) is the correct direction for decreasing the value")
f7=F.subs([(x1,kp[2][0]-lam*sp[0]),(x2,kp[2][1]-lam*sp[1])])
print(f7)
F4=f7.diff(lam)
sol=solve(F4)
print("lambda =",sol)
X2=(kp[2][0]-sol[0]*sp[0],kp[2][1]-sol[0]*sp[1])
print("X5=",X2)
f1=F.subs([(x1,kp[2][0]-sol[0]*sp[0]),(x2,kp[2][1]-sol[0]*sp[1])])
print("f5",f1)
else:
print("xi has minimum along the direction Si.")

You might also like