I am attempting to work a problem from a textbook in sympy, but sympy fails 
to find a solution which appears valid. For interest, it is the design of a 
PID controller using direct synthesis with a second order plus dead time 
model.

The whole problem can be reduced to finding K_C, tau_I and tau_D which will 
make

K_C*(s**2*tau_D*tau_I + s*tau_I + 1)/(s*tau_I) = (s**2*tau_1*tau_2 + s*tau_1 + 
s*tau_2 + 1)/(K*s*(-phi + tau_c))


for given tau_1, tau_2, K and phi.


I have tried to solve this by matching coefficients:


import sympy


s, tau_c, tau_1, tau_2, phi, K = sympy.symbols('s, tau_c, tau_1, tau_2, 
phi, K')

target = (s**2*tau_1*tau_2 + s*tau_1 + s*tau_2 + 1)/(K*s*(-phi + tau_c))

K_C, tau_I, tau_D = sympy.symbols('K_C, tau_I, tau_D', real=True)
PID = K_C*(1 + 1/(tau_I*s) + tau_D*s)

eq = (target - PID).together()
eq *= sympy.denom(eq).simplify()
eq = sympy.poly(eq, s)

sympy.solve(eq.coeffs(), [K_C, tau_I, tau_D])

This returns an empty matrix. However, the textbook provides the following 
solution:

booksolution = {K_C: 1/K*(tau_1 + tau_2)/(tau_c - phi),
                tau_I: tau_1 + tau_2,a
                tau_D: tau_1*tau_2/(tau_1 + tau_2)}

Which appears to satisfy the equations I'm trying to solve: 

[c.subs(booksolution).simplify() for c in eq.coeffs()]

returns

[0, 0, 0]

Can I massage this into a form which sympy can solve? What am I doing wong?

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To post to this group, send email to sympy@googlegroups.com.
Visit this group at https://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/4d922cfe-9f54-4196-b7d8-15abb053e091%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to