def t12(): # fixme: F = 1 - any... wild - STRANGE s = Symbol('s') T = 50.0*(s+3)*(s+12.0)/((s+30.0)*(s+55.0)*(s+100.0)*(s+1000.0)) # T = 60*(s + 3)*(s + 16)/((s + 33)*(s + 75)*(s + 200)*(s + 2000)) # # T = Add(5000, s) / (s*(s+5)*(s+50)) # T = 10*(s + 2)*(s + 22)/((s + 40)*(s + 65)*(s + 150)) # T = -20*(s + 2)*(s + 26)/((s + 43)*(s + 85)*(s + 250)*(s + 2500)) # T = 2.72 * (s + 7)*(s + 20)/((s + 10)*(s + 100)*(s + 1000)) T = -25*(s + 2)*(s + 44)/((s + 55)*(s + 66)*(s + 77)*(s + 8800)) # T = 50*( s + 0.05 )*( s + 0.5 ) / (s *( s + 5 )) * 5000/(s+10) * 1/5000/s**2 # loops F = T+1 M = T/F # T = F syss = [syms2tf(T), syms2tf(F), syms2tf(M)] labels = ['T', 'F', 'M'] w = logspace(-1, 2, 1e3) # need it for l, sys in zip(labels, syss): bode(sys, w, label=l) legend() # nyquist([syms2tf(T)]) show()
def analyse_ex(): s = Symbol('s') # Loop C = 50*(s+0.05)*(s+0.5) / (s*(s+5)) C = (50*s**2+ 27.5*s+0.25) / (s*(s+5)) A = Poly(5000, s) / (s+10) B = 1 P = Poly(1, s)/(5000*s**2) # D3_in = Poly(1, s)/((s+0.1) * (s+2)) # OL_D3_out = expand( P * D3_in ) # dist = syms2tf( OL_D3_out, s ) # w = logspace(-2, 1, 1000) # bode(dist, w, label="src") # bode(syms2tf(D3_in,s), w, label="feedback") # legend() # show() T = C*A*P F = T + 1 M = T/F w = logspace( -1, 2, 1e4 ) # fixme: autocast # fixme: не сходится с книжкой # fixme: bug: if (<-1, N)... не может правильно определить фазу sys = syms2tf( T, s ) mag, phase, omega = bode(sys, w, label="T(s)") bode(syms2tf( F,s ), w, label="F(s)") bode(syms2tf( M,s ), w, label="M(s)") legend() show() clear() plot( phase, mag )