【问题标题】:MATLAB symbolic state space matrix is too largeMATLAB符号状态空间矩阵太大
【发布时间】:2011-11-17 19:43:50
【问题描述】:

我正在尝试从我拥有的状态空间矩阵生成传递函数。 问题是矩阵有变量而不是数值,所以我必须在 Matlab 中使用符号变量。

所以我开始了:

A =

[  -a0,    0,    0,    0,    0,    0,   a1]
[    0,  -a2,    0,    0,    0,    0,   a3]
[    0,    0,  -a4,    0,    0,    0,   a5]
[    0,    0,    0,  -a6,    0,    0,   a7]
[    0,    0,    0,    0,  -a8,    0,   a9]
[    0,    0,    0,    0,    0, -a10,  a11]
[  a12,  a13,  a14,  a15,  a16,  a17, -a18]

B =

[ b0, b1]
[  0, b2]
[  0, b3]
[  0, b4]
[  0, b5]
[  0, b6]
[  0,  0]

C = 

[ 0, 0, 0, 0, 0, 0, 1]

D = 0

然后我在网上找到了一个方法,使用

Phi=inv(s*eye(7)-A)

其中 Phi 是一个传输矩阵。然后使用

H = C * Phi * B + D

H 应该是结果。

但是 MATLAB 无法处理 7 x 7 矩阵并最终截断结果。

有没有更好的方法可以实现我需要的传递函数?

【问题讨论】:

  • 看起来手工更容易。您是否尝试过简单地计算出您那里的公式?
  • 是的。它不是。我用手试了一下,但很快就变得可笑了。
  • “截断结果”到底是什么意思?
  • 根据 Matlab,结果有超过 25000 个术语,不会再显示,因此停止显示和计算它们。可能是因为内存不足。我不确定。

标签: matlab truncated state-space


【解决方案1】:

看看这个维基百科article on matrix inversion。在考虑矩阵 (Is-A) 时,它具有非常特殊的形状,您可以使用该文章中给出的一些恒等式来反转它。您所要做的就是将其拆分为块,其中 A 是您的对角线部分,B 是右侧的垂直向量,C 是底部的水平向量,D 是矩阵右下角的单个元素。您必须以这种方式进行的唯一反转是反转 A,它是对角线且非常容易反转,以及 (D-C*inv(A)*B) 是单个数字,因为您的 C 和 B 分别是行向量和列向量。这可以通过手工或符号工具箱非常容易地完成。

【讨论】:

  • 谢谢。以后我会收藏这个。现在我将只使用一个较小的矩阵。
【解决方案2】:

为了兼容B的维度,你的D矩阵应该是

D = [0 0];

也许H的截断是因为这个?

【讨论】:

  • 我已经改变了这一点。然而它仍然在做同样的事情。现在我将模型简化为 3x3 矩阵。该代码现在可以工作并输出两个传递函数。即使简化,它们也很大。我想知道 matlab 是否根本无法处理这种大小的符号结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 2020-05-23
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 2018-03-24
相关资源
最近更新 更多