Python Control库step_info返回全NaN值问题求助
问题原因及解决思路
以下是可能导致Python Control库返回全NaN结果的原因及对应解决方法:
非最小相位系统的数值计算兼容性问题
你的闭环系统属于非最小相位系统(零点位于右半平面),Control库的step_info函数对这类系统的性能指标计算逻辑不如Matlab鲁棒,容易出现数值计算异常返回NaN。可以尝试手动计算系统响应数据后自行提取指标,或者升级Control库到最新版本,新版本可能修复了此类兼容问题。传递函数未化简导致的数值精度问题
代码中Gc和Gp的(s+1)环节理论上可抵消,但Control库自动计算闭环传递函数时可能因浮点精度残留冗余环节,导致系统内部表示异常。在定义sys1后添加传递函数化简操作:sys1 = c.minreal(sys1)再调用
step_info即可解决大部分数值精度问题。step_info参数阈值与Matlab不一致
Control库的step_info默认的调节时间误差带、稳态值计算逻辑可能和Matlab不同,对于非最小相位系统的响应,无法满足默认收敛条件导致返回NaN。可以手动指定参数强制计算:data1 = c.step_info(sys1, settling_time_threshold=0.02, steady_state_tol=1e-3)Pade近似的隐式参数差异
确认Control库与Matlab使用的Pade近似阶数一致,Control库的pade默认是1阶,若Matlab中使用了其他阶数会导致系统模型不一致。可以在代码中明确指定阶数:d = c.pade(0.3, n=1)
内容的提问来源于stack exchange,提问作者HWIK
相关产品推荐
相关产品推荐

