【发布时间】:2013-11-24 13:03:33
【问题描述】:
我想问一下如何从数组中创建多个状态空间。
输入是:
A1toA100 (100xn double)
B1toB100 (100xp double)
C1toC100 (100xn double)
D1toD100 (100xp double)
示例:
A1toA10 =
-0.5909
-0.4178
-0.3412
-0.2954
-0.2643
-0.2412
-0.2233
-0.2089
-0.1970
-0.1869
>> B1toB10
B1toB10 =
33.3333
33.3333
33.3333
33.3333
33.3333
33.3333
33.3333
33.3333
33.3333
33.3333
>> C1toC10
C1toC10 =
1
1
1
1
1
1
1
1
1
1
>> D1toD10
D1toD10 =
0
0
0
0
0
0
0
0
0
0
其中每一个都包含一百个相应类型(A、B、C 或 D)的矩阵。
输出应该是:
SS1toSS100 (100x ss)
每组矩阵对应一个状态空间。
第一个系统的示例:
使用此代码
ss([-0.5909],[33.3333],[1],[0])
我得到了正确的输出。四个数字,一个系统 。这个:
ans =
a =
x1
x1 -0.5909
b =
u1
x1 33.33
c =
x1
y1 1
d =
u1
y1 0
但是使用此代码:
for i=1:2
pom=[-0.5909 33.3333 1 0]
SS1toSS10(i)=ss(pom(1),pom(2),pom(3),pom(4));
end
虽然我应该得到两个与第一个相同的系统,但我得到了这个:
SS1toSS10
SS1toSS10 =
a =
x1 x2
x1 -0.5909 0
x2 0 -0.5909
b =
u1 u2
x1 33.33 0
x2 0 33.33
c =
x1 x2
y1 1 1
d =
u1 u2
y1 0 0
Continuous-time state-space model.
这是一个错误的答案。
方法一:
for i=1:length(A1toA100)
SS1toSS100(i)=ss(A1toA100(i),B1toB100,C1toC100,D1toD100);
end
这生成了 100 个状态空间,矩阵尺寸为 200x200,这是错误的,因为我期望尺寸为 2x2。显然考虑了整个矩阵的维度。
示例输入向量的示例输出:
S1toS10(1,1).a
-0,417825056426464 0 0 0 0 0 0 0 0 0
0 -0,341152729998142 0 0 0 0 0 0 0 0
0 0 -0,295446930748805 0 0 0 0 0 0 0
0 0 0 -0,264255768359200 0 0 0 0 0 0
0 0 0 0 -0,241231408801990 0 0 0 0 0
0 0 0 0 0 -0,223336886965331 0 0 0 0
0 0 0 0 0 0 -0,208912528213232 0 0 0
0 0 0 0 0 0 0 -0,196964620499203 0 0
0 0 0 0 0 0 0 0 -0,186857045774452 0
0 0 0 0 0 0 0 0 0 -0,590893861497609
S1toS10(1,1).b
0
0
0
0
0
0
0
0
0
33,3333333333333
S1toS10(1,1).c
1 1 1 1 1 1 1 1 1 1
S1toS10(1,1).d
0
方法2:
for i=1:length(A1toA100)
SS1toSS100(i)=arrayfun(@ss,A1toA100(i),B1toB100,C1toC100,D1toD100);
end
以这个错误结束。
使用 arrayfun 时出错 ss 输出类型当前未实现。
感谢您的帮助, 彼得
【问题讨论】:
-
为什么不:
SS1toSS100(i)=ss(A1toA100(i),B1toB100(i),C1toC100(i),D1toD100(i));? -
考虑到我有一个一阶系统(只有 4 个数字)并在其上应用此功能。结果将是每个状态空间都有一个尺寸为 200x200 的矩阵 A(或任何 A1toA100 的尺寸)。这是不正确的。除此之外,我发现每个状态空间的每个 A 矩阵都是相同的。所以我猜想以某种方式将整个矩阵带入状态空间函数。
-
请张贴输入向量元素的示例。
-
您可以编辑您的问题。您发布的内容可能没有行向量?仍然:我在第一条评论中的建议呢?您似乎访问了整个数组数组,而不仅仅是每次迭代中的一个。
-
谢谢,它就在那里。 (不,它们是行向量,我刚刚编辑它们以不占用那么多空间,因为我不知道可编辑的问题)。你的第一个建议和我的第一个方法一样,不是吗?
标签: arrays matlab matrix function-handle state-space