Matlab 基于系统矩阵的自定义传递函数

Matlab 基于系统矩阵的自定义传递函数,matlab,simulink,equation-solving,Matlab,Simulink,Equation Solving,背景:我有一个复杂的机械振动系统。通过类比,我把它转换成一个电路(每个元件都是RLC振荡器)。计算电路的唯一方法是节点分析,手工计算太复杂了 由于符号数学工具箱和SimPowerSystems工具箱不可用,因此没有方便的方法计算传递函数G(s)以使用传递函数块 所以我考虑过使用自定义函数,但是在查阅了文档之后,我仍然很无助。我希望在这里找到一些初步想法 我的系统可以用矩阵方程来描述: A*x = y 其中A是包含电路RLC阻抗的8x8矩阵,因此基本上每个元素都是多项式Z(s),例如Z_11(s

背景:我有一个复杂的机械振动系统。通过类比,我把它转换成一个电路(每个元件都是RLC振荡器)。计算电路的唯一方法是节点分析,手工计算太复杂了

由于符号数学工具箱SimPowerSystems工具箱不可用,因此没有方便的方法计算传递函数
G(s)
以使用传递函数块

所以我考虑过使用自定义函数,但是在查阅了文档之后,我仍然很无助。我希望在这里找到一些初步想法

我的系统可以用矩阵方程来描述:

A*x = y
其中A是包含电路RLC阻抗的
8x8
矩阵,因此基本上每个元素都是多项式
Z(s)
,例如
Z_11(s)=(s^1+2s^0)/(s^2+3s-s^-1)
其中
s
是拉普拉斯域变量。向量
x
是包含我的8个标量输出的8x1行向量。而
y
是一个8x1行向量,其元素为我的4个输入信号之一或0

最后,我需要一个具有4个输入和8个输出的Simulink块,用于求解以
s
为变量的线性方程组

或者,我可以想象使用4个块,每个块只有一个输入(将其他输入设置为“零”),然后将它们叠加。仅选择一个输出也是可以想象的


有什么方法可以实现这一点吗?如何创建在拉普拉斯域而非时域中工作的块?

您可以按照建议使用4个(SISO)块,但对于像您这样的MIMO系统,我建议您将系统转换为状态空间表示形式或将其重新写入状态空间表示形式,并改用块。

需要使用传递函数定义
n x n
系统矩阵:

W = minreal( [  tf( ... ) ... tf(...) ; ... ; tf( ... ) ... tf(...)  ];
e、 g:

->

通常需要反转

H = inv(W);
该矩阵可直接包含在控制系统工具箱的LTI系统块中。 使用mux和demux嵌入输入和输出向量


在内部,LTI系统正在使用n*n个建议的状态空间模型,因此,对于大型系统来说,手动创建这些模型将非常复杂。

这并不能真正解决我的问题。我目前正在使用控制系统工具箱的“LTI系统”模块开发一个解决方案,该模块允许我评估充满传递函数的系统矩阵。如果它最终成功了,我会把它贴在这里。它以什么方式解决不了你的问题?我建议的两种方法都是有效的(我以前使用过),状态空间表示是一种更好的建模MIMO系统的方法。1) 不熟悉我的代码的人也需要使用该模型,我相信他们可以创建方形系统矩阵,但我怀疑他们能否创建状态空间系统。我也有我的问题,因为一些微分方程是四阶甚至更高。一个单一的矩阵是最透明的。2) 我听说转换成ss matlab能做的并不总是可靠的。3) 我的第一个想法是使用几个SISO块,这似乎很复杂,因为系统大小必须相等,我不想为每个特定的问题添加块。我正在研究的解决方案涉及一个'nxn'传递矩阵,每个元素代表一个振荡电路。通过反转矩阵,我可以使用具有多个输入和输出的LTI系统块。如果它起作用,在我看来,这是一个干净的解决方案。
Z_11 = tf( [1 2 0] , [1 3 -1] );
H = inv(W);