Чувствительность нескольких корней

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

Пример

Полюса с высокой кратностью и кластерами соседних полюсов могут быть очень чувствительны к погрешностям округления, которые могут иногда иметь поразительные последствия. Этот пример использует модель в пространстве состояний дискретного времени 15-го порядка Hss с кластером стабильных полюсов около z=1:

load numdemo Hss

Преобразуйте модель в передаточную функцию с помощью tf:

Htf = tf(Hss);

Сравнение ответа

Сравните переходные процессы Hss и Htf, чтобы видеть, как чувствительность полюса может влиять на устойчивость модели и вызвать большие изменения в вычисленное время и частотные характеристики:

step(Hss,'b',Htf,'r',20)
legend('Hss','Htf')

Переходной процесс Htf отличается даже при том, что модель в пространстве состояний, Hss стабилен (все его полюса лежат в модульном кругу). Диаграмма Боде также показывает большое несоответствие между моделями передаточной функции и пространством состояний:

bode(Hss,'b',Htf,'r--')
legend('Hss','Htf')

Алгоритм, используемый, чтобы преобразовать от пространства состояний до передаточной функции, не вызывает это несоответствие. Если вы преобразовываете от пространства состояний до нулей и полюсов, первого шага в каком-либо SS к преобразованию TF, несоответствия исчезают:

Hzpk = zpk(Hss);

step(Hss,'b',Hzpk,'r--')
legend('Hss','Hzpk')

bode(Hss,'b',Hzpk,'r--')

Этот анализ показывает, что несоответствия возникают в ZPK к преобразованию TF, которое просто включает вычисление полинома от его корней.

Причина несоответствия

Чтобы понять причину этих больших несоответствий, сравните карты полюса/нуля модели в пространстве состояний и ее передаточной функции:

pzplot(Hss,'b',Htf,'r')
legend('Hss','Htf')

Отметьте плотно упакованный кластер полюсов рядом z=1 в Hss. Когда эти полюса повторно объединены в знаменатель передаточной функции, ошибки округления тревожат кластер полюса в равномерно распределенный звонок полюсов вокруг z=1 (типичный шаблон для встревоженного несколько корней). К сожалению, некоторые встревоженные полюса пересекают модульный круг и делают передаточную функцию нестабильной. Увеличьте масштаб графика видеть эти полюса:

pzplot(Hss,'b',Htf,'r');
axis([0.5 1.5 -.4 .4])

Можно подтвердить это объяснение с простым экспериментом. Создайте полином, корни которого являются полюсами R1 Hss, вычисляют корни этого полинома и сравнивают эти корни с R1:

R1 = pole(Hss);                  % poles of Hss
Den = poly(R1);                  % polynomial with roots R1
R2 = roots(Den);                 % roots of this polynomial
plot(real(R1),imag(R1),'bx',real(R2),imag(R2),'r*')
legend('R1','roots(poly(R1))');

Этот график показывает, что ROOTS(POLY(R1)) очень отличается от R1 из-за кластеризованных корней. В результате корни знаменателя передаточной функции значительно отличаются от полюсов исходной модели в пространстве состояний Hss.

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