Die Beispielprogramme des Kapitels 3 behandeln die Berechnung von dynamischen Systemen mit Python.
web301
Lösen einer DGL mit Python
Listing 3.1: Die Lösung einer linearen oder nicht linearen Differenzielgleichung ist mit dem SciPy-Paket möglich.
# -*- coding: utf-8 -*- """ Lösung einer linearen DGL Created on 6.9. 2018 @author: philippsen """ # P-T1 from scipy.integrate import odeint import numpy as np import matplotlib.pyplot as plt def deriv(xa, t, xe): a0 = 0.7 b0 = 0.2 xapunkt = -a0*xa + b0*xe return xapunkt time = np.arange(0.0, 10.0, 0.01) xaAnfang = 0 u = 1.0 xa = odeint(deriv, xaAnfang, time, args=(u,)) plt.figure() plt.plot(time,xa[:,0] ) # plt.title('Lösung DGL mit Python P-T1') plt.grid()
web302
Beispiel 3.4
Listing 3.2: Im Beispiel 3.4 wird die Berechnung des Bode-Diagramms, der Orstkurve und der Sprungantwort eines Regelkreises behandelt.
# -*- coding: utf-8 -*- """ Standardregelstrecke mit PI-Regler Beispiel 3.4 Created on 21.3. 2019, modifiziert für Version 0.10.1 am 19.8.24 @author: philippsen """ import numpy as np import control as ct import matplotlib.pyplot as plt a0 = 1.; a1 = 10. ; a2 = 31. ; a3 = 30. b0 = 1. num = np.array([b0]) den = np.array([a3, a2, a1, a0]) strecke = ct.tf(num,den) #regler = tf([5, 1],[5, 0]) # PI-Regler regler = ct.tf([5],[1]) G0 = regler*strecke # Reihenschaltung R(s) und G(s) print('G0 =',G0.name) ct.bode_plot(G0,title='Bode-Plot',label=['G0']) gm, pm, wg, wp = ct.margin(G0) gmdb = 20*np.log10(gm); wphz = wp/(2*np.pi) print('Amplitudenreserve = ',gm,' in dB = ',gmdb) print('Phasenreserve = ',pm) print('Durchtrittsfrequenz = ',wp,' in Hertz = ',wphz) Gw = ct.feedback(G0, 1) ct.bode_plot(Gw,title='Bode-Plot',label=['Gw']) plt.figure() t, y = ct.step_response(Gw) plt.plot(t,y) plt.title('Regelkreis Sprungantwort') plt.xlabel('t [s]'); plt.ylabel('h(t)') plt.grid() plt.show() plt.figure() ct.nyquist_plot(G0,title='Ortskurve G0') plt.figure() # oder mit Matplotlib direkt res = ct.nyquist_response(G0) plt.plot(res.response.real,res.response.imag) plt.title('Ortskurve G0 mit Matplotlib') plt.xlabel('Real'); plt.ylabel('Imag') plt.grid(True)