Этот пример показывает, что соответствующее масштабирование моделей в пространстве состояний может быть очень важным для точности и предоставляет обзор автоматических и ручных инструментов перемасштабирования.
Модель в пространстве состояний хорошо масштабируется, когда записи A, B, C матрицы гомогенные в значении, и образцовые характеристики нечувствительны к небольшим возмущениям A, B, C (по сравнению с их нормами). В отличие от этого, модель плохо масштабируется, когда A, B, C имеют и маленькие и большие записи и образцовые характеристики, чувствительны к маленьким записям.
Смешивание разрозненных масштабов времени или модульных шкал может дать начало плохо масштабируемым моделям. Работа с такими моделями может привести к серьезной потере точности и озадачивающих результатов. Чтобы предотвратить эти проблемы, часто необходимо повторно масштабировать вектор состояния, то есть, умножить каждое состояние на некоторый масштабный коэффициент, чтобы уменьшать числовую область значений и чувствительность модели.
Плохое масштабирование может повлиять на точность большинства вычислений частотного диапазона. Современные алгоритмы в большой степени полагаются на ортогональные координатные преобразования состояния, и такие преобразования вводят ошибки порядка eps
(точность машины) времена нормы A, B, C. В то время как такие ошибки обычно незначительны, они могут стать доминирующими, когда A, B, C плохо масштабируются. Чтобы видеть это явление, загрузите следующий пример:
load numdemo anil
Модель anil
является реализацией пространства состояний 20-й передаточной функции порядка с большинством ее движущих сил между 1e3 и 1e5 рад/с. Коэффициенты матричная область значений между 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')
Этот пример показывает, что для плохо масштабированных моделей, даже ортогональные преобразования могут быть небезопасными и уничтожить точность.
Для простых моделей, выведенных от физики, можно постараться не масштабировать проблемы путем тщательного выбора модулей, чтобы уменьшать распространение между маленькими и большими коэффициентами. Для более сложных моделей, однако, находя соответствующее масштабирование сложно. Оперативные схемы, такие как балансировка матрица (см. balance
) часто полезны, но иногда вредны.
Программное обеспечение Control System Toolbox™ предоставляет усовершенствованные масштабирующиеся алгоритмы, которые минимизируют чувствительность модели к небольшим возмущениям A, B, C пропорциональный их нормам. Это помогает максимизировать точность вычисленной частотной характеристики, представления ZPK, и т.д. команда prescale
является шлюзом к этим алгоритмам масштабирования. Например, можно использовать prescale
, чтобы масштабировать модель anil
, используемую выше:
Scaled_anil = prescale(anil);
Коэффициенты матрица теперь располагаются от 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 заботится о масштабировании автоматически. Вы предупреждены, когда точность может поставиться под угрозу, и можно легко исправить проблему путем определения диапазона частот интереса.