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

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

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

Модель в пространстве состояний хорошо масштабируется, когда записи A, B, C матрицы гомогенные в величине, и характеристики модели нечувствительны к небольшим возмущениям 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) часто полезны, но иногда вредны.

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

Scaled_anil = prescale(anil);

Коэффициенты матрицы A теперь располагаются от 1e3 до 3e7 вместо 1 к 1e80. Примените ортогональное преобразование 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 рад/с и между 1e3 и 1e6 рад/с, разделенный отбрасыванием усиления на 300 дБ. Можно устранить предупреждение путем сужения частотного диапазона интереса, например, к [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,1e6] полоса.

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

Пространство состояний (@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 (больше предупреждения).

Заключение

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