You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中对传递函数矩阵求逆?

Python中实现传递函数矩阵的求逆与频域分析(替代MATLAB对应功能)

问题背景

在MATLAB中可直接创建传递函数矩阵并执行求逆、绘制Bode图操作:

s = tf('s')
G11 = (s + 1)/(s + 2)
G12 = 1/(2*s + 1)
G21 = 1/(3*s + 1)
G22 = 1/(4*s + 1)

A = [G11 G12; G21, G22]
Ai = inv(A)
bode(A)

但尝试用Python+numpy+control工具箱复现时,numpy.linalg.inv无法处理传递函数对象矩阵,报错:

UFuncTypeError: Cannot cast ufunc 'inv' input from dtype('O') to dtype('float64') with casting rule 'same_kind'

且直接用numpy.array包装传递函数矩阵后,control.bode也无法正常工作。

解决方法

不要用numpy处理传递函数矩阵,而是直接使用control工具箱自身的矩阵操作能力,它原生支持传递函数对象的矩阵运算:

可运行代码

import control as co

# 创建复频率变量
s = co.tf('s')

# 定义单个传递函数
G11 = (s + 1)/(s + 2)
G12 = 1/(2*s + 1)
G21 = 1/(3*s + 1)
G22 = 1/(4*s + 1)

# 用control.mat构造传递函数矩阵(也可直接用列表嵌套,control会自动识别)
A = co.mat([[G11, G12], [G21, G22]])

# 使用control.inv求传递函数矩阵的逆
Ai = co.inv(A)

# 直接传入传递函数矩阵绘制Bode图
co.bode(A)

关键说明

  • control工具箱的mat函数专门用于构造由传递函数/状态空间对象组成的矩阵,替代numpy.array的包装
  • control.inv是针对动态系统矩阵的求逆函数,支持传递函数矩阵,而numpy.linalg.inv仅处理数值型数组
  • control.bode可以直接接收control库的矩阵对象,无需转换为numpy数组

扩展操作

control工具箱还支持其他针对传递函数矩阵的线性代数操作,例如:

  • 求行列式:co.det(A)
  • 求迹:co.trace(A)
  • 矩阵乘法:A @ A(Python 3.5+支持的矩阵乘法运算符)

内容的提问来源于stack exchange,提问作者David Daminelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:20:53