Я хотел бы спросить, как создать несколько состояний из массивов.Как сгенерировать несколько пространств состояний из массивов в MATLAB
вход:
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.
Какой неправильный ответ ,
Подход 1:
for i=1:length(A1toA100)
SS1toSS100(i)=ss(A1toA100(i),B1toB100,C1toC100,D1toD100);
end
Это породило 100 пространства состояний с размерами матрицы 200х200, что не так, как я ожидал бы размеры 2х2. Очевидно, рассматриваются размеры целых матриц.
Пример выходных данных для примера входных векторов:
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)); – thewaywewalk
Учитывая, что у меня есть система 1-го порядка (всего 4 числа) и примените к ней эту функцию. Результат состоит в том, что каждое пространство состояний имеет матрицу A с размерами 200x200 (или любые размеры A1toA100). Это неверно. В дополнение к этому я обнаружил, что каждая из матриц А каждого из пространств состояний идентична. Таким образом, я предполагаю, что каким-то образом вся матрица взята в функцию пространства состояний. – PeV
, пожалуйста, отправьте примеры элементов вашего входного вектора. – thewaywewalk