Я пытаюсь спроектировать наблюдателя в Луенбергере так, чтобы при наличии одного датчика я мог оценить все состояния.
Моя система 4-го порядка:
NUM4 = [-0.00198 2];
DEN4 = [1 0.1201 12.22 0.4201 2];
sys = tf(NUM4,DEN4);
[A, B, C, D] = tf2ss(NUM4,DEN4);
Сначала у меня есть строкавектор полюсов, чтобы получить желаемый ответ:
p1 = [-2.6 + 1i*2.39, -2.6 - 1i*2.39, -100, -120];
K = acker(A,B,p1)
p_1 = eig(A-B*K) %This should be the same as p1, but it is not
Затем я приступаю к вычислению полюсов растений, и поэтому полюсы, которые я хочу для своего наблюдателя, должны быть примерно в 3 раза быстрее.
rank(ctrb(A,B)) % =4
rank(obsv(A,C)) % =4
planteig=eig(A);
fastpoles = 3*planteig;
Затем я перехожу к использованию формулы Аккермана для размещения полюсов с использованием новых полюсов:
L=acker(A',C',p2)
L=L'
p_2 = eig(A-L*C) %This should be the same as p2
И, наконец, построение графика:
mysys=ss(A-B*K,B,C,0);
step(74826*mysys)
После этого документа вКак построить наблюдателей, на странице 6 написано, что мы можем проверить расположение полюсов, рассчитав A-B*K
, которое должно совпадать с полюсами, помещенными в формулу Аккермана:
![enter image description here](https://i.stack.imgur.com/lazE2.jpg)
Это не имеет места в моем случае, и поэтому я подозреваю, что результирующие значения матрицы неверны.
Собственные значения для eig(A-B*K)
:
ans =
1.0e+02 *
-1.2000 + 0.0000i
-1.0000 + 0.0000i
-0.0260 + 0.0239i
-0.0260 - 0.0239i
, что не равно p1
= p1 = [-2.6 + 1i*2.39, -2.6 - 1i*2.39, -100, -120];
и eig(A-L*C)
=
ans =
-0.0505 + 1.2211i
-0.0505 - 1.2211i
-0.1296 +10.4136i
-0.1296 -10.4136i
, что равно p2
, но полюсы не в правильном порядке =
-0.1296 +10.4136i
-0.1296 -10.4136i
-0.0505 + 1.2211i
-0.0505 - 1.2211i
Почему собственные значения не совпадают с исходными полюсами в моем случае, как указано в документе?Я что-то неправильно кодирую?