exponenta event banner

Масштабирование моделей состояния-пространства для максимизации точности

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

Почему масштабирование имеет значение

Модель состояния-пространства хорошо масштабируется, когда записи матриц A, B, C однородны по величине, а характеристики модели нечувствительны к малым возмущениям A, B, C (по сравнению с их нормами). Напротив, модель плохо масштабируется, когда А, В, С имеют как малые, так и большие записи, и характеристики модели чувствительны к малым записям.

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

Слабое масштабирование может повлиять на точность большинства вычислений в частотной области. Современные алгоритмы в значительной степени основаны на преобразованиях координат ортогонального состояния, и такие преобразования вносят ошибки порядка eps (точность машины) умножить на нормы A, B, C. Хотя такие ошибки обычно незначительны, они могут стать доминирующими, когда A, B, C плохо масштабированы. Чтобы увидеть это явление, загрузите следующий пример:

load numdemo anil

anil модель представляет собой реализацию в пространстве состояний 20-й передаточной функции заказа с большей частью ее динамики между 1e3 и 1e5 рад/с. Коэффициенты матрицы A находятся в диапазоне от 1 до 1e80 по величине. Для моделирования эффекта ортогональных преобразований, применяемых к этой модели, создайте случайную ортогональную матрицу U и использовать ss2ss для выполнения соответствующего изменения координат состояния:

[U,junk] = qr(randn(20));
anil2 = ss2ss(anil,U);   % perform state coordinate transformation U

Математически, anil и anil2 имеют одинаковую частотную характеристику. Однако численно ответы Боде anil и anil2 очень разные:

bode(anil,'b',anil2,'r--')
legend('Original','After Orthogonal Transformation','Location','southwest')

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

Чувствительность - минимизация масштабирования

Для простых моделей, полученных из физики, можно избежать проблем масштабирования, тщательно выбрав единицы измерения, чтобы уменьшить разброс между малыми и большими коэффициентами. Однако для более сложных моделей поиск правильного масштабирования является сложной задачей. Специальные схемы, такие как балансировка матрицы A (см. balance) часто полезны, но иногда вредны.

Программное обеспечение системы управления Toolbox™ предоставляет расширенные алгоритмы масштабирования, которые минимизируют чувствительность модели к малым возмущениям A, B, C, пропорциональным их нормам. Это помогает максимизировать точность вычисленной частотной характеристики, представления ZPK и т.д. prescale команда является шлюзом к этим алгоритмам масштабирования. Например, можно использовать prescale для масштабирования anil модель, использованная выше:

Scaled_anil = prescale(anil);

Коэффициенты матрицы А теперь варьируются от 1е3 до 3е7 вместо 1 до 1е80. Применение ортогонального преобразования U к масштабированной модели и сравните ответы Боде:

Scaled_anil2 = ss2ss(Scaled_anil,U);
bode(Scaled_anil,'b',Scaled_anil2,'r--')
legend('Scaled Model','After Orthogonal Transformation','Location','southwest')

Ответы Боде сейчас тесно совпадают. Масштабирование снова сделало ортогональные преобразования безопасными, и можно ожидать хорошей точности от вычислений с использованием этой масштабированной модели.

Автоматическое масштабирование

Большинство алгоритмов в программном обеспечении Control System Toolbox автоматически масштабируют модели пространства состояния, чтобы предотвратить катастрофическую потерю точности. В результате вы в основном изолированы от проблем масштабирования. Например, bode команда автоматически масштабирует входящие модели, чтобы она могла безопасно выполнять ортогональные преобразования для ускорения вычисления частотной характеристики. Поэтому нет необходимости использовать prescale прежде bode если не требуется подробная информация об относительной точности вычисленного отклика Боде.

Ручное масштабирование

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

load numdemo warnsys
bode(warnsys,{1e-3,1e6}), grid on

Обратите внимание на предупреждение, выданное bode команда. Эта модель 17-го порядка имеет динамику около 0,01 рад/с и между 1е3 и 1е6 рад/с, разделенную 300dB падением коэффициента усиления. Можно исключить предупреждение, сузив диапазон интересующих частот, например, до [10, 1e6] рад/с:

bode(warnsys,{10,1e6}), grid on

Это предписывает алгоритму максимизировать точность в интервале [10, 1e6]. Можно также исследовать базовый компромисс точности, введя:

>> prescale(warnsys)

Эта команда открывает интерактивный инструмент масштабирования, показанный ниже. Установите предельные значения частотной оси 1e-2 и 1e6. Верхний график показывает величину частотной характеристики, а нижний график показывает:

  • Относительная точность вычисленного отклика без масштабирования (красный)

  • Относительная точность вычисленного отклика с масштабированием (синий)

  • Наилучшая достижимая точность при использовании независимого масштабирования на каждой частоте (коричневая)

Любое относительное значение точности, превышающее одну, сигнализирует о плохой точности.

В этом примере график относительной точности показывает, что алгоритм масштабирования достиг хорошей точности в [1e3,1e6] полосе частот за счет точности на низких частотах. Если вы заботитесь только о полосе частот [1e-3.1], вы можете переопределить этот выбор диапазона по умолчанию и вручную указать диапазон частот, где требуется максимальная точность. Например, введите [1e-3,1] в полях редактирования рядом с пунктом Максимизация точности в полосе частот:

Это действие обновляет нижний график, и относительная точность масштабированной модели (синяя кривая) теперь лучше всего приближается к 1e-2 рад/с, но значительно хуже в [1e3,16] диапазоне.

Масштабированное свойство моделей пространства состояний

Объект State-Space (@ ss) имеет Scaled для указания того, когда модель уже масштабирована. Значение по умолчанию: false. prescale команда устанавливает для этого свойства значение true:

sys = prescale(anil);
sys.Scaled
ans =

  logical

   1

Потому что алгоритм масштабирования пропускает модели с Scaled=true, вы можете вручную установить Scaled свойство для true если модель хорошо масштабирована и требуется исключить небольшие издержки, связанные с масштабированием. Если требуется больше контроля над тем, где максимизируется точность, можно также явно масштабировать модель перед ее использованием:

sys = prescale(warnsys,{10,1e6});
bode(sys)

Здесь warnsys масштабируется с акцентом на частотный диапазон [10, 1e6] иbode не пытается изменить масштаб результирующей модели sys (больше никаких предупреждений).

Заключение

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