我想问一下如何从数组创建多个状态空间。
输入是:
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其中每一个都包含100个相应类型的矩阵(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.这是个错误的答案。
方法1:
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输出类型的错误。
谢谢你的帮助,佩尔
发布于 2013-11-24 14:49:54
现在我明白你的问题了!你的上一次编辑很重要。
在一个变量中存储多个状态空间模型的唯一方法是一个struct。因此,您的循环必须如下所示:
SS1toSS100(100) = struct; %pre-allocation
for ii=1:100
temp_ss = ss( A1toA100(ii) , B1toB100(ii) , C1toC100(ii) , D1toD100(ii) );
SS1toSS100(ii) = struct('ss',temp_ss);
end甚至更短:
SS1toSS100(100) = struct; %pre-allocation
for ii=1:100
SS1toSS100(ii).ss = ss( A1toA100(ii) , B1toB100(ii) , C1toC100(ii) , D1toD100(ii) );
end它为您提供了一个包含100个ss对象的结构。
例如,如果您现在想访问第五个数据库,请键入:
SS1toSS100(5).ss然后你就会得到
ans =
a =
x1
x1 -0.5909
b =
u1
x1 33.33
c =
x1
y1 1
d =
u1
y1 0
Continuous-time state-space model.PS:不要使用i作为迭代变量,这是一个内部的Matlab变量,并为复数保留
https://stackoverflow.com/questions/20174767
复制相似问题