trim

Найдите точку обрезки динамической системы

Синтаксис

[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 особенно полезны для нахождения точек обрезки.

Нет.ДефолтОписание
10Задает параметры отображения. 0 задает отсутствие отображения; 1 задает табличный выход; -1 подавляет предупреждающие сообщения.
210–4Точность вычисленной точки обрезки должна достигаться, чтобы завершить поиск.
310–4Прецизия функции цели поиска обрезки должна достигаться, чтобы завершить поиск.
410–6Прецизия производных состояния должна достигнуть, чтобы прекратить поиск.
5Н/ДНе используется.
6Н/ДНе используется.
7Н/ДИспользуется внутренне.
8Н/ДВозвращает значение функции цели поиска обрезки (
9Н/ДНе используется.
10Н/ДВозвращает количество итераций, используемых для поиска точки обрезки.
11Н/ДВозвращает количество вычислений градиента функции.
120Не используется.
130Количество ограничений равенства.
14100 * (Количество переменных)Максимальное количество вычислений функции для поиска точки обрезки.
15Н/ДНе используется.
1610–8Используется внутренне.
170.1Используется внутренне.
18Н/ДВозвращает длину шага.

[x,u,y,dx,options] = trim('sys',x0,u0,y0,ix,iu,iy,dx0,idx,options,t) устанавливает время на t если система зависит от времени.

Примечание

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

Примеры

Рассмотрим линейную систему в пространстве состояний, смоделированную с помощью блока State-Space

x˙=Ax+Buy=Cx+Du

Матрицы 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];

Пример 1

Чтобы найти точку равновесия в этой модели, называемую sys, использовать:

[x,u,y,dx,options] = trim('sys')
x =
   0
   0
u =
   0
   0
y =
   0
   0
dx =
   0
   0

Это количество проделанных итераций:

options(10)
ans =
      7

Пример 2

Чтобы найти точку равновесия около 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

Пример 3

Чтобы найти точку равновесия с выходами, фиксированными на 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

Пример 4

Чтобы найти точку равновесия с выходами, фиксированными на 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).

Представлено до R2006a