MATLAB - Расположение полюсов не приводит к правильной матрице собственных значений - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь спроектировать наблюдателя в Луенбергере так, чтобы при наличии одного датчика я мог оценить все состояния.

Моя система 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

Это не имеет места в моем случае, и поэтому я подозреваю, что результирующие значения матрицы неверны.

Собственные значения для 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

Почему собственные значения не совпадают с исходными полюсами в моем случае, как указано в документе?Я что-то неправильно кодирую?

1 Ответ

0 голосов
/ 24 декабря 2018

Я не вижу твоей проблемы с p1.Вы получаете собственные значения в другом порядке, но это соответствует p1 с точностью до перестановки.

В общем, я не вижу здесь никакой ошибки кода;Ваша проблема в том, что eig может сортировать собственные значения (по убыванию), это не всегда так.Если вам нужно обеспечить конкретный порядок, вы должны выполнить дополнительное кодирование для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...