g) $ s(t)=\operatorname{rect}\left(t-\frac{1}{2}\r...
Erstellt am: 9. März 2025
Erstellt am: 9. März 2025
g) sd42io22C0 die Laplace-Transformierten Fc1u7dd6 und die zugehörigen Konvergenzbereiche XddEyUS1 sowie die Pol-/NullstellenDiagramme [...]
Bitte mit code interpreter das DIagramm zeichnen. Danke
Im Folgenden sei die Rechteckfunktion definiert als
Damit ist
im Intervall gleich 1 und außerhalb davon 0 (Randwerte ggf. gemäß Konvention).
Die (einseitige) Laplace-Transformierte von ist
Da nur auf dem endlichen Intervall ungleich 0 ist, konvergiert obiges Integral für alle komplexen . Man kann daher sagen, dass die Laplace-Transformierte überall in der komplexen Ebene definiert ist (bzw. der Konvergenzbereich ist ).
Betrachtet man zunächst „formal“, so scheint es bei eine Polstelle zu geben (wegen des Faktors ). Allerdings heben sich Zähler und Nenner in der Nähe von gerade auf, wie man am Limes
erkennt. Damit ist kein echter Pol, sondern nur eine entfernbare Singularität, und es verbleiben keine weiteren Pol- oder Nullstellen im endlichen Bereich der -Ebene.
Fazit:
Unten sehen Sie ein Beispiel in Python (z.B. in einem Jupyter-Notebook oder mit „Code Interpreter“) dafür, wie man symbolisch die Laplace-Transformierte berechnet und anschließend (rein illustrativ) ein Pol-Nullstellen-Diagramm zeichnet. Da hier jedoch keine Pol- und Nullstellen vorliegen, wird das Diagramm letztlich nur ein leeres Koordinatensystem sein, in dem wir ggf. zur Demonstration die entfernbare Singularität bei markieren.
Hinweis:
Wenn Sie dies in einer Umgebung wie ChatGPT mit Code-Interpreter (bzw. „Python & Matplotlib“) ausführen, wird das Diagramm direkt gerendert.
pythonimport sympy import matplotlib.pyplot as plt # Symbolische Variable t = sympy.Symbol('t', real=True, nonnegative=True) s = sympy.Symbol('s', complex=True) # Rechteckfunktion rect(t - 1/2) = 1 auf [0,1], sonst 0 # In vielen Fällen einfacher darstellbar als u(t) - u(t-1) rect = sympy.Heaviside(t) - sympy.Heaviside(t - 1) # Laplace-Transformierte berechnen S_s = sympy.laplace_transform(rect, t, s) print("Laplace-Transformierte S(s) =", S_s.simplify()) # Wir können die Polstellen aus dem Ausdruck bestimmen: poles = sympy.apart(S_s).as_ordered_terms() # das ist nur ein möglicher Weg # Besser: sympy.poles(S_s) – in neueren Sympy-Versionen print("Hinweis: Polstellen nach 'sympy.poles' oder manuell analysiert:", "Keine echten Polstellen") # Plot (leeres) Pol-Nullstellen-Diagramm fig, ax = plt.subplots() # Da es keine echten Pole/Nullstellen gibt, # zeichnen wir nur eine Markierung bei s=0 (entfernbare Singularität). ax.scatter([0], [0], marker='o', color='black', label='s=0 (entfernbare Singularität)') # Achsenhalbierung etc. ax.axhline(0, linewidth=0.8, color='gray') ax.axvline(0, linewidth=0.8, color='gray') ax.set_xlabel('Re(s)') ax.set_ylabel('Im(s)') ax.set_title('Pol- / Nullstellen-Diagramm von S(s) = (1 - e^{-s}) / s') ax.legend() plt.show()
Erläuterung:
sympy.laplace_transform
berechnet das Symbolische Integral .Damit sind alle verlangten Informationen (Transformierte, Konvergenzbereich, Pol- und Nullstellendiagramm) zusammengefasst.
/Documentos/projects temp/NullstellenDiagramm.py"
Traceback (most recent call last):
File "c:\Users\anton\OneDrive\Documentos\projects temp\NullstellenDiagramm.py", line 14, in <module>
print("Laplace-Transformierte S(s) =", S_s.simplify())
^^^^^^^^^^^^
AttributeError: 'tuple' object has no attribute 'simplify'
PS C:\Users\anton\OneDrive\Documentos\projects temp>
Der Fehler
AttributeError: 'tuple' object has no attribute 'simplify'
bedeutet, dass sympy.laplace_transform(...)
an dieser Stelle ein Tupel zurückliefert und nicht nur einen einzigen Ausdruck. In neueren Sympy-Versionen erhält man häufig (Ausdruck, Bedingung)
, d. h. neben der eigentlichen Transformierten auch einen Ausdruck, der den Konvergenzbereich oder weitere Bedingungen beschreibt.
Um das Problem zu beheben, können Sie entweder:
noconds=True
verwenden, damit ausschließlich der Laplace-Ausdruck zurückgegeben wird.pythonimport sympy import matplotlib.pyplot as plt t = sympy.Symbol('t', real=True, nonnegative=True) s = sympy.Symbol('s', complex=True) # Rechteckfunktion rect(t - 1) = Heaviside(t) - Heaviside(t-1) rect = sympy.Heaviside(t) - sympy.Heaviside(t - 1) # laplace_transform gibt bei neueren Versionen standardmäßig (Ausdruck, Bedingungen) zurück S_s, conditions = sympy.laplace_transform(rect, t, s, conds=True) # S_s ist jetzt der eigentliche Ausdruck, conditions enthält Zusatzinfos (Konvergenzbereiche etc.) print("Laplace-Transformierte S(s) =", sympy.simplify(S_s)) print("Bedingungen:", conditions) # Plot (Pol-Nullstellen-Diagramm), hier aber kein echter Pol fig, ax = plt.subplots() ax.scatter([0], [0], marker='o', label='s=0 (entfernbare Singularität)') ax.axhline(0, color='gray') ax.axvline(0, color='gray') ax.set_xlabel('Re(s)') ax.set_ylabel('Im(s)') ax.set_title('Pol-/Nullstellen-Diagramm') ax.legend() plt.show()
noconds=True
verwendenWenn Sie die Konditionen/Region-of-Convergence-Ausgabe von sympy.laplace_transform
nicht benötigen, können Sie mit dem Schlüsselwort noconds=True
direkt nur den Laplace-Ausdruck erhalten:
pythonimport sympy import matplotlib.pyplot as plt t = sympy.Symbol('t', real=True, nonnegative=True) s = sympy.Symbol('s', complex=True) rect = sympy.Heaviside(t) - sympy.Heaviside(t - 1) # Hier nur das reine Symbol zurückgeben S_s = sympy.laplace_transform(rect, t, s, noconds=True) S_s_simpl = sympy.simplify(S_s) print("Laplace-Transformierte S(s) =", S_s_simpl) # Plot (Pol-Nullstellen-Diagramm) fig, ax = plt.subplots() ax.scatter([0], [0], marker='o', label='s=0 (entfernbare Singularität)') ax.axhline(0, color='gray') ax.axvline(0, color='gray') ax.set_xlabel('Re(s)') ax.set_ylabel('Im(s)') ax.set_title('Pol-/Nullstellen-Diagramm') ax.legend() plt.show()
Auf diese Weise werden Sie keine AttributeError
-Meldung mehr erhalten, da S_s
bzw. S_s_simpl
nun ein Symbol- oder Funktionsausdruck ist, an dem man simplify()
ausführen kann – und kein Tupel mehr.
\begin{aligned}
&\text { g) }\
&\begin{aligned}
& \quad s(t)=\operatorname{rect}\left(t-\frac{1}{2}\right)=\varepsilon(t)-\varepsilon(t-1) \quad \Rightarrow \quad s(t) \text { kausal, rechtsseitig, zeitbegrenzt } \
& \
& \
& S(p)=\frac{1}{p}\left(1-\mathrm{e}^{-p}\right) \quad \text { Nullstellen: } \quad k \cdot \mathrm{j} 2 \pi \
& p_P=0 ; \quad p_N=0 \Leftrightarrow \text { heben sich gegenseitig auf } \
& \Rightarrow \quad \text { Konvergenzbereich: da } s(t) \text { zeitbegrenzt } \Rightarrow \text { ganze } p \text {-Ebene }
\end{aligned}
\end{aligned}
So in der Musterlösung. Bitte es zeichnen. Danke
Im Folgenden wird anhand des Ausdrucks
das Pol-Nullstellen-Diagramm (Pole-Zero-Plot) gezeichnet. Gemäß der Musterlösung:
Damit bleiben effektiv nur die Nullstellen auf der imaginären Achse bei mit .
Untenstehender Code zeichnet die Pole und Nullstellen in der -Ebene.
Da es unendlich viele Nullstellen gibt (alle ganzzahligen Vielfache von ), schränken wir die Darstellung auf einen endlichen Bereich ein, damit das Diagramm nicht „unendlich“ wird.
pythonimport matplotlib.pyplot as plt import numpy as np # Für das Diagramm: wir stellen nur k von -3 bis 3 dar k_values = range(-3, 4) zeros_real = [] zeros_imag = [] for k in k_values: if k != 0: # Nicht k=0, weil p=0 hebt sich auf zeros_real.append(0) zeros_imag.append(2*np.pi*k) # Plot vorbereiten fig, ax = plt.subplots() # 1) Nullstellen markieren (Kreuze 'x') ax.scatter(zeros_real, zeros_imag, marker='x', label='Nullstellen: p = j 2πk, k≠0') # 2) Markierung der "aufgehobenen" Pole/Nullstelle an p=0 # Man kann zur Verdeutlichung einen kleinen Kreis zeichnen. ax.scatter([0], [0], marker='o', facecolors='none', edgecolors='r', label='p=0 (aufgehoben)') # Achsen ax.axhline(0, color='gray', linewidth=0.8) ax.axvline(0, color='gray', linewidth=0.8) ax.set_xlabel('Re(p)') ax.set_ylabel('Im(p)') ax.set_title('Pol-Nullstellen-Diagramm zu S(p) = (1 - e^{-p}) / p') # Grenzen für bessere Sicht ax.set_xlim(-1, 1) # Pol-Nullstellen liegen nur auf der imaginären Achse ax.set_ylim(-7*np.pi, 7*np.pi) # Wir haben k von -3..3 => +/- 6π als grobe Begrenzung ax.legend() plt.show()
Nullstellen:
Pol:
Konvergenzbereich:
Das resultierende Diagramm zeigt also lauter Nullstellen entlang der reinen Im-Achse bei (). Die nominelle Pol-/Nullstelle bei ist entfernt (keine echte Polstelle mehr), daher markieren wir sie ggf. nur als „aufgehoben“.