Найдите точку обрезки динамической системы
[x,u,y,dx] = trim('
sys
')
[x,u,y,dx] = trim('sys
',x0,u0,y0)
[x,u,y,dx] = trim('sys
',x0,u0,y0,ix,iu,iy)
[x,u,y,dx] = trim('sys
',x0,u0,y0,ix,iu,iy,dx0,idx)
[x,u,y,dx,options] = trim('sys
',x0,u0,y0,ix,iu,iy,dx0,idx,options)
[x,u,y,dx,options] = trim('sys
',x0,u0,y0,ix,iu,iy,dx0,idx,options,t)
Точка обрезки, также известная как точка равновесия, является точкой в пространстве параметров динамической системы, в которой система находится в установившемся состоянии. Например, точка отделки самолета является настройкой его органов управления, которая заставляет самолет летать прямо и на уровне. Математически точка обрезки является точкой, где производные состояния системы равны нулю. trim
начинается с начальной точки и ищет, используя последовательный квадратичный алгоритм программирования, пока не найдет ближайшую точку обрезки. Исходную точку необходимо задать неявно или неявно. Если trim
не может найти точку обрезки, она возвращает точку, с которой сталкивается в своем поиске, где производные состояния наиболее близки к нулю в смысле min-max; то есть она возвращает точку, которая минимизирует максимальное отклонение от нуля производных. trim
может найти точки обрезки, которые удовлетворяют определенным входам, вывода или состояния, и может найти точки, где система изменяется заданным образом, то есть точки, где производные состояния системы равны определенным ненулевым значениям.
[x,u,y,dx] = trim('
находит точку равновесия модели 'sys
')sys
', ближайший к начальному состоянию системы, x0
. В частности, trim
находит точку равновесия, которая минимизирует максимальное абсолютное значение [x-x0,u,y]
. Если trim
не может найти точку равновесия вблизи начального состояния системы, она возвращает точку, в которой система находится ближе всего к равновесию. В частности, возвращается точка, которая минимизирует abs(dx)
где dx
представляет производную системы. Можно получить x0
использование этой команды.
[sizes,x0,xstr] = sys([],[],[],0)
[x,u,y,dx] = trim('
находит ближайшую к ней точку обрезки sys
',x0,u0,y0)x0
, u0
, y0
, то есть точка, которая минимизирует максимальное значение
abs([x-x0; u-u0; y-y0])
[x,u,y,dx] = trim('
находит ближайшую к sys
',x0,u0,y0,ix,iu,iy)x0
точку обрезки,
u0
, y0
который удовлетворяет заданному набору состояний, входных и/или выходных условий. Целочисленные векторы ix
, iu
, и iy
выберите значения в x0
, u0
, и y0
это должно быть удовлетворено. Если trim
не может найти точку равновесия, которая точно удовлетворяет заданному набору условий, она возвращает ближайшую точку, которая удовлетворяет условиям, а именно:
abs([x(ix)-x0(ix); u(iu)-u0(iu); y(iy)-y0(iy)])
[x,u,y,dx] = trim('
находит определенные неравновесные точки, то есть точки, в которых производные системы имеют некоторое заданное ненулевое значение. Здесь, sys
',x0,u0,y0,ix,iu,iy,dx0,idx)dx0
задает значения производной по состоянию в начальной точке поиска и idx
выбирает значения в dx0
что поиск должен удовлетворять точно.
[x,u,y,dx,options] = trim('
задает массив параметров оптимизации, который sys
',x0,u0,y0,ix,iu,iy,dx0,idx,options)trim
переходит к оптимизационной функции, которую она использует для поиска точек обрезки. Оптимизационная функция, в свою очередь, использует этот массив, чтобы управлять процессом оптимизации и возвращать информацию о процессе. trim
возвращает options
массив в конце процесса поиска. Раскрывая базовый процесс оптимизации таким образом, trim
позволяет контролировать и подстраивать поиск точек обрезки.
В следующей таблице описано, как каждый элемент влияет на поиск точки обрезки. Элементы массива 1, 2, 3, 4 и 10 особенно полезны для нахождения точек обрезки.
Нет. | Дефолт | Описание |
---|---|---|
1 | 0 | Задает параметры отображения. 0 задает отсутствие отображения; 1 задает табличный выход; -1 подавляет предупреждающие сообщения. |
2 | 10–4 | Точность вычисленной точки обрезки должна достигаться, чтобы завершить поиск. |
3 | 10–4 | Прецизия функции цели поиска обрезки должна достигаться, чтобы завершить поиск. |
4 | 10–6 | Прецизия производных состояния должна достигнуть, чтобы прекратить поиск. |
5 | Н/Д | Не используется. |
6 | Н/Д | Не используется. |
7 | Н/Д | Используется внутренне. |
8 | Н/Д | Возвращает значение функции цели поиска обрезки ( |
9 | Н/Д | Не используется. |
10 | Н/Д | Возвращает количество итераций, используемых для поиска точки обрезки. |
11 | Н/Д | Возвращает количество вычислений градиента функции. |
12 | 0 | Не используется. |
13 | 0 | Количество ограничений равенства. |
14 | 100 * (Количество переменных) | Максимальное количество вычислений функции для поиска точки обрезки. |
15 | Н/Д | Не используется. |
16 | 10–8 | Используется внутренне. |
17 | 0.1 | Используется внутренне. |
18 | Н/Д | Возвращает длину шага. |
[x,u,y,dx,options] = trim('
устанавливает время на sys
',x0,u0,y0,ix,iu,iy,dx0,idx,options,t)t
если система зависит от времени.
Примечание
Если вы фиксируете любое из состояний, входных или выходных значений, trim
использует неопределенные свободные переменные, чтобы вывести решение, которое удовлетворяет этим ограничениям.
Рассмотрим линейную систему в пространстве состояний, смоделированную с помощью блока State-Space
Матрицы A, B, C и D для ввода в командной строке или в диалоговом окне параметров блоков:.
A = [-0.09 -0.01; 1 0]; B = [ 0 -7; 0 -2]; C = [ 0 2; 1 -5]; D = [-3 0; 1 0];
Чтобы найти точку равновесия в этой модели, называемую sys
, использовать:
[x,u,y,dx,options] = trim('sys') x = 0 0 u = 0 0 y = 0 0 dx = 0 0
Это количество проделанных итераций:
options(10) ans = 7
Чтобы найти точку равновесия около x = [1;1], u = [1;1]
, введите
x0 = [1;1]; u0 = [1;1]; [x,u,y,dx,options] = trim('sys', x0, u0); x = 1.0e-13 * -0.5160 -0.5169 u = 0.3333 0.0000 y = -1.0000 0.3333 dx = 1.0e-12 * 0.1979 0.0035
Это количество проделанных итераций
options(10) ans = 25
Чтобы найти точку равновесия с выходами, фиксированными на 1
, использовать:
y = [1;1]; iy = [1;2]; [x,u,y,dx] = trim('sys', [], [], y, [], [], iy) x = 0.0009 -0.3075 u = -0.5383 0.0004 y = 1.0000 1.0000 dx = 1.0e-15 * -0.0170 0.1483
Чтобы найти точку равновесия с выходами, фиксированными на 1, и производными, установленными на 0 и 1, используйте
y = [1;1]; iy = [1;2]; dx = [0;1]; idx = [1;2]; [x,u,y,dx,options] = trim('sys',[],[],y,[],[],iy,dx,idx) x = 0.9752 -0.0827 u = -0.3884 -0.0124 y = 1.0000 1.0000 dx = 0.0000 1.0000
Это количество проделанных итераций
options(10) ans = 13
Точка обрезки, найденная trim
начиная с любой заданной начальной точки, это только локальное значение. Другие, более подходящие точки обрезки могут существовать. Таким образом, если вы хотите найти наиболее подходящую точку обрезки для конкретного приложения, важно попробовать ряд начальных догадок для x
, u
, и y
.
trim
использует последовательный квадратичный алгоритм программирования, чтобы найти точки обрезки. Описание этого алгоритма см. в разделе Последовательное квадратичное программирование (SQP) (Optimization Toolbox).