I'm using the following code as part of a recursively called process.
It processes a proportional feedback loop provided by a polynom, that might use complex coefficients.
By the way, I can't use the usual formula for quadratic equations because is swapped by an other function of higher degree for PI and PID-feedbacks. Thank you for any hints
Thomas
It processes a proportional feedback loop provided by a polynom, that might use complex coefficients.
import numpy.polynomial.polynomial as poly import math import cmath def coefficients(k, ts, t1): z1 = complex(1-k*t1,0) z2 = complex(k*(ts+2*t1)-1-math.exp(-ts/t1),0) z3 = complex(math.exp(-ts/t1)-k*(t1+ts*math.exp(-ts/t1)),0) coeff = (z1,z2,z3) return coeff coeff = coefficients(0, 0.3, 0.4) # coeff = ((1+0j), (-1.4723665527410148+0j), (0.47236655274101474+0j)) roots = poly.polyroots(coeff) # roots = [ 1.00000000+0.j 2.11700002+0.j] # ... # The first root is ok, the second is not a root: >>> coeff[0]*roots[0]**2+coeff[1]*roots[0]+coeff[2] -2.7755575615628914e-16 >>> coeff[0]*roots[1]**2+coeff[1]*roots[1]+coeff[2] 1.8370556064664063 # The correct value for the 2nd root would have been 0.4723665524 >>> coeff[0]*0.4723665524**2+coeff[1]*0.4723665524+coeff[2] 1.799307924876814e-10What are I'm doing wrong? Or is there another method to calculate the root locus in NumPy?
By the way, I can't use the usual formula for quadratic equations because is swapped by an other function of higher degree for PI and PID-feedbacks. Thank you for any hints
Thomas