- Notifications
You must be signed in to change notification settings - Fork450
Open
Description
Description
When computing impulse responses for discrete-time systems with negative real poles,ct.impulse_response() generates aRuntimeWarning: divide by zero encountered in divide. This occurs even though the system is valid and the results are correct.
Minimal Reproducible Example
importcontrolasctimportnumpyasnp# Discrete-time system with poles at -1 and -2b,a= [1,3,0], [1,3,2]sys=ct.TransferFunction(b,a,dt=True)# This triggers the warningt,y=ct.impulse_response(sys,5)
Output:
RuntimeWarning: divide by zero encountered in divide t_emp = np.max(log_decay_percent / np.abs((np.log(p_nr)/dt).real))Root Cause
The warning originates from the settling time calculation in the time response functions. For negative real poles in discrete-time systems:
np.log(-1) = 0 + πj(real part is exactly 0)np.log(-2) = 0.693 + πj(real part is small)
The code attempts to compute settling time using:
t_emp=np.max(log_decay_percent/np.abs((np.log(p_nr)/dt).real))
When the real part oflog(p_nr) is zero or near-zero, this causes division by zero.
For discrete-time systems, stability and settling behavior should be based on pole magnitudes (|pole| < 1), not logarithms of negative numbers.
Metadata
Metadata
Assignees
Labels
No labels