In [2]:
import numpy as np
import sympy as sy
import control.matlab as cm
In [22]:
z = sy.symbols('z', real=False)
hh,r1,r2,s0,s1,s2,s3, aa = sy.symbols('h,r1,r2, s0,s1,s2,s3, a')
Bp = 1+aa
Ap = z+aa
pd1 = 0.4
pd2 = 0.4 + 1j*0.3
pd3 = np.conjugate(pd2)
Ac1 = sy.simplify( sy.expand( (z-pd2)*(z-pd3) ) )
Ac = sy.simplify( sy.expand( (z-pd1)*Ac1 ) ) # Desired closed loop poles
print Ac
print sy.simplify( sy.expand( Ap * z*z*(z-1) ) )
In [23]:
Bp = Bp.subs(aa, -0.8)
Ap = Ap.subs(aa, -0.8)
print Bp
print Ap
In [33]:
Rp = (z-1)*(z**2+r1*z + r2)
Sp = s0*z**3 + s1*z**2 + s2*z + s3
Ao = (z-0.2)**3
diophLHS = sy.simplify( sy.collect( sy.expand( Ap *z**2 * Rp) + Bp*Sp, z ) )
diophRHS = sy.simplify( sy.collect( sy.expand( Ac * Ao), z) )
diophEq = sy.poly( sy.simplify( sy.expand( diophLHS - diophRHS ) ), z )
dioph=diophEq.all_coeffs()
print sy.latex(diophLHS)
print sy.latex(diophRHS)
print dioph
print sy.expand(Ao)
In [27]:
sol=sy.solve(dioph, (r1,r2, s0,s1,s2))
print sol[r1]
print sol[r2]
print sol[s0]
print sol[s1]
print sol[s2]
t0 = Ac.evalf(subs={z:1})/Bp.evalf(subs={z:1,})
print t0
In [ ]: