You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Originally posted by MEnzmann November 19, 2024
Hi all!
I am little puzzled about the declaration of transfer-functions with control.zpk. The step-responses / impulse-responses of a transfer-function declared with control.zpk seem to unstable, although the poles are in the left-half plane and a bode plot does not show unstable poles. Am I missing something in the following MME?
Help would be appreciated! TIA!
_import control as ct
import control.matlab as ml
import matplotlib.pyplot as pl
Declare stable system as zpk
Gzp = ct.zpk([-5],[-1,-10], gain=4)
print(Gzp)
Declare same system as tf
Gtf = ct.tf([4,20], [1,11, 10])
print(Gtf)
Both systems share the same poles and zeros, the difference of both systems is 0.
Yet: the Gzp system is instable in simulations while Gtf is stable (as expected)
I took a quick look and confirmed that I am getting the same results (and that something is wrong).
The issue appears to be that Gzp above has timebase None while Gtf has timebase 0. In the forced_response function (which is called by impulse_response), the logic is set up so that a timebase of None gets interpreted as a discrete time system. This means that the system is now unstable (since the magnitude of one of the poles is greater than 1).
I'll need to think through how to fix this in the right way. As a very short term fix, if you set the timebase explicitly, the problem goes away:
Activity
murrayrm commentedon Nov 20, 2024
I took a quick look and confirmed that I am getting the same results (and that something is wrong).
The issue appears to be that
Gzpabove has timebaseNonewhileGtfhas timebase0. In theforced_responsefunction (which is called byimpulse_response), the logic is set up so that a timebase ofNonegets interpreted as a discrete time system. This means that the system is now unstable (since the magnitude of one of the poles is greater than 1).I'll need to think through how to fix this in the right way. As a very short term fix, if you set the timebase explicitly, the problem goes away: