我想问一下如何从数组创建多个状态空间。
输入是:
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])
我得到了正确的输出。四个数字,一个系统 <1x1 ss>。这个:
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
虽然我应该得到 2 个与第一个相同的系统,但我得到了这个:
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
方法二:
for i=1:length(A1toA100)
SS1toSS100(i)=arrayfun(@ss,A1toA100(i),B1toB100,C1toC100,D1toD100);
end
以这个错误结束。
当前未实现使用 arrayfun ss 输出类型的错误。
谢谢你的帮助,彼得