linearize

Линейная аппроксимация модели Simulink или подсистемы

Описание

пример

linsys = linearize(mdl,io) возвращает линейную аппроксимацию нелинейной модели mdl Simulink® в рабочей точке модели с помощью аналитических точек задан в io. Если вы не используете io, затем linearize использует корневой импорт уровня и выходные порты модели, когда анализ указывает.

пример

linsys = linearize(mdl,io,op) линеаризует модель в рабочей точке op.

пример

linsys = linearize(mdl,io,param) линеаризует модель с помощью изменений значения параметров, заданных в param. Можно варьироваться любой параметр модели со значением, данным переменной в рабочем пространстве модели, рабочей области MATLAB® или словаре данных.

пример

linsys = linearize(mdl,io,blocksub) линеаризует модель с помощью блока замены или линеаризации подсистемы, заданной в blocksub.

пример

linsys = linearize(mdl,io,options) линеаризует модель с помощью дополнительных опций линеаризации.

linsys = linearize(mdl,io,op,param,blocksub,options) линеаризует модель с помощью любой комбинации op, param, blocksub, и options в любом порядке.

пример

linsys = linearize(mdl,blockpath) возвращает линейную аппроксимацию блока или подсистемы в модели mdl, заданный blockpath, в рабочей точке модели. Программное обеспечение изолирует блок из остальной части модели перед линеаризацией.

пример

linsys = linearize(mdl,blockpath,op) линеаризует блок или подсистему в рабочей точке op.

linsys = linearize(mdl,blockpath,param) линеаризует блок или подсистему с помощью изменений значения параметров, заданных в param. Можно варьироваться любой параметр модели со значением, данным переменной в рабочем пространстве модели, рабочем пространстве MATLAB или словаре данных.

linsys = linearize(mdl,blockpath,blocksub) линеаризует блок или подсистему с помощью блока замены или линеаризации подсистемы, заданной в blocksub.

linsys = linearize(mdl,blockpath,options) линеаризует блок или подсистему с помощью дополнительных опций линеаризации.

linsys = linearize(mdl,blockpath,op,param,blocksub,options) линеаризует блок или подсистему с помощью любой комбинации op, param, blocksub, и options в любом порядке.

пример

linsys = linearize(___,'StateOrder',stateorder) задает порядок состояний в линеаризовавшей модели для любого из предыдущих синтаксисов.

пример

[linsys,linop] = linearize(___) возвращает рабочую точку, в которой линеаризовалась модель. Используйте этот синтаксис при линеаризации в снимках состояния симуляции или когда различные параметры во время линеаризации.

пример

[linsys,linop,info] = linearize(___) возвращает дополнительную информацию о линеаризации. Выбрать информацию о линеаризации, чтобы возвратиться в info, включите соответствующую опцию в options.

Примеры

свернуть все

Откройте модель Simulink.

mdl = 'watertank';
open_system(mdl)

Задайте вход линеаризации при выходе блока PID Controller, который является входным сигналом для блока Water-Tank System.

io(1) = linio('watertank/PID Controller',1,'input');

Задайте выходную точку линеаризации при выходе блока Water-Tank System. При определении выходной точки, когда разомкнутый цикл удаляет эффекты сигнала обратной связи на линеаризации, не изменяя рабочую точку модели.

io(2) = linio('watertank/Water-Tank System',1,'openoutput');

Линеаризуйте модель с помощью заданного набора ввода-вывода.

linsys = linearize(mdl,io);

linsys линейная аппроксимация объекта в рабочей точке модели.

Откройте модель Simulink.

mdl = 'magball';
open_system(mdl)

Найдите установившуюся рабочую точку, в которой высотой шара является 0.05. Создайте спецификацию рабочей точки по умолчанию и установите состояние высоты на известное значение.

opspec = operspec(mdl);
opspec.States(5).Known = 1;
opspec.States(5).x = 0.05;

Обрежьте модель, чтобы найти рабочую точку.

options = findopOptions('DisplayReport','off');
op = findop(mdl,opspec,options);

Задайте сигналы ввода и вывода линеаризации вычислить передаточную функцию с обратной связью.

io(1) = linio('magball/Desired Height',1,'input');
io(2) = linio('magball/Magnetic Ball Plant',1,'output');

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

linsys = linearize(mdl,io,op);

Откройте модель Simulink.

mdl = 'watertank';
open_system(mdl)

Чтобы вычислить передаточную функцию с обратной связью, сначала задайте сигналы ввода и вывода линеаризации.

io(1) = linio('watertank/PID Controller',1,'input');
io(2) = linio('watertank/Water-Tank System',1,'output');

Симулируйте sys для 10 секунды и линеаризуют модель.

linsys = linearize(mdl,io,10);

Откройте модель Simulink.

mdl = 'scdcascade';
open_system(mdl)

Задайте изменения параметра для контроллера внешнего цикла усиления, Kp1 и Ki1. Создайте сетки параметра для каждого значения усиления.

Kp1_range = linspace(Kp1*0.8,Kp1*1.2,6);
Ki1_range = linspace(Ki1*0.8,Ki1*1.2,4);
[Kp1_grid,Ki1_grid] = ndgrid(Kp1_range,Ki1_range);

Создайте структуру значения параметров с полями Name и Value.

params(1).Name = 'Kp1';
params(1).Value = Kp1_grid;
params(2).Name = 'Ki1';
params(2).Value = Ki1_grid;

params 6 4 сетка значения параметров, где каждый узел решетки соответствует уникальной комбинации Kp1 и Ki1 значения.

Задайте точки ввода и вывода линеаризации для вычисления ответа с обратной связью системы.

io(1) = linio('scdcascade/setpoint',1,'input');
io(2) = linio('scdcascade/Sum',1,'output');

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

linsys = linearize(mdl,io,params);

Откройте модель Simulink.

mdl = 'scdpwm';
open_system(mdl)

Извлеките ввод и вывод линеаризации из модели.

io = getlinio(mdl);

Линеаризуйте модель в рабочей точке модели.

linsys = linearize(mdl,io)
linsys =
 
  D = 
                Step
   Plant Model     0
 
Static gain.

Разрывы в блоке Voltage to PWM заставляют модель линеаризовать, чтобы обнулить. Чтобы обработать этот блок как модульное усиление во время линеаризации, задайте линеаризацию замены для этого блока.

blocksub.Name = 'scdpwm/Voltage to PWM';
blocksub.Value = 1;

Линеаризуйте модель с помощью заданной замены блока.

linsys = linearize(mdl,blocksub,io)
linsys =
 
  A = 
                 State Space(  State Space(
   State Space(        0.9999       -0.0001
   State Space(        0.0001             1
 
  B = 
                   Step
   State Space(  0.0001
   State Space(   5e-09
 
  C = 
                State Space(  State Space(
   Plant Model             0             1
 
  D = 
                Step
   Plant Model     0
 
Sample time: 0.0001 seconds
Discrete-time state-space model.

Откройте модель Simulink.

mdl = 'watertank';
open_system(mdl)

Чтобы линеаризовать блок Water-Tank System, задайте ввод и вывод линеаризации.

io(1) = linio('watertank/PID Controller',1,'input');
io(2) = linio('watertank/Water-Tank System',1,'openoutput');

Создайте набор опции линеаризации и задайте шаг расчета для линеаризовавшей модели.

options = linearizeOptions('SampleTime',0.1);

Линеаризуйте объект с помощью заданных опций.

linsys = linearize(mdl,io,options)
linsys =
 
  A = 
          H
   H  0.995
 
  B = 
      PID Controll
   H       0.02494
 
  C = 
                 H
   Water-Tank S  1
 
  D = 
                 PID Controll
   Water-Tank S             0
 
Sample time: 0.1 seconds
Discrete-time state-space model.

Линеаризовавший объект является моделью в пространстве состояний дискретного времени с шагом расчета 0.1.

Откройте модель Simulink.

mdl = 'watertank';
open_system(mdl)

Задайте полный блок path для блока, который вы хотите линеаризовать.

blockpath = 'watertank/Water-Tank System';

Линеаризуйте заданный блок в рабочей точке модели.

linsys = linearize(mdl,blockpath);

Открытая модель Simulink.

mdl = 'magball';
open_system(mdl)

Найдите установившуюся рабочую точку, в которой высотой шара является 0.05. Создайте спецификацию рабочей точки по умолчанию и установите состояние высоты на известное значение.

opspec = operspec(mdl);
opspec.States(5).Known = 1;
opspec.States(5).x = 0.05;
options = findopOptions('DisplayReport','off');
op = findop(mdl,opspec,options);

Задайте блок path для блока, который вы хотите линеаризовать.

blockpath = 'magball/Magnetic Ball Plant';

Линеаризуйте заданный блок в заданной рабочей точке.

linsys = linearize(mdl,blockpath,op);

Откройте модель Simulink.

mdl = 'magball';
open_system(mdl)

Линеаризуйте объект в рабочей точке модели.

blockpath = 'magball/Magnetic Ball Plant';
linsys = linearize(mdl,blockpath);

Просмотрите порядок состояния по умолчанию для линеаризовавшего объекта.

linsys.StateName
ans =

  3x1 cell array

    {'height' }
    {'Current'}
    {'dhdt'   }

Линеаризуйте объект и переупорядочьте состояния в линеаризовавшей модели. Установите скорость изменения высоты как второе состояние.

stateorder = {'magball/Magnetic Ball Plant/height';...
              'magball/Magnetic Ball Plant/dhdt';...
              'magball/Magnetic Ball Plant/Current'};
linsys = linearize(mdl,blockpath,'StateOrder',stateorder);

Просмотрите новый порядок состояний.

linsys.StateName
ans =

  3x1 cell array

    {'height' }
    {'dhdt'   }
    {'Current'}

Откройте модель Simulink.

mdl = 'watertank';
open_system(mdl)

Чтобы вычислить передаточную функцию с обратной связью, сначала задайте сигналы ввода и вывода линеаризации.

io(1) = linio('watertank/PID Controller',1,'input');
io(2) = linio('watertank/Water-Tank System',1,'output');

Симулируйте sys и линеаризуйте модель в 0 и 10 секунды. Возвратите рабочие точки, которые соответствуют этим временам снимка состояния; то есть, рабочие точки, в которых линеаризовалась модель.

[linsys,linop] = linearize(mdl,io,[0,10]);

Откройте модель Simulink.

mdl = 'watertank';
open_system(mdl)

Варьируйтесь параметры A и b в 10% их номинальной стоимости.

[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),...
                         linspace(0.9*b,1.1*b,4));

Создайте массив структур параметра, задав имя и узлы решетки для каждого параметра.

params(1).Name = 'A';
params(1).Value = A_grid;
params(2).Name = 'b';
params(2).Value = b_grid;

Создайте спецификацию рабочей точки по умолчанию для модели.

opspec = operspec(mdl);

Обрежьте модель с помощью заданной спецификации рабочей точки, сетки параметра. Подавите отображение отчета поиска рабочей точки.

opt = findopOptions('DisplayReport','off');
[op,opreport] = findop(mdl,opspec,params,opt);

op массив 3 на 4 объектов рабочей точки, которые соответствуют заданным узлам решетки параметра.

Задайте блок path для модели объекта управления.

blockpath = 'watertank/Desired  Water Level';

Чтобы сохранить смещения во время линеаризации, создайте набор опции линеаризации и установите StoreOffsets к true.

options = linearizeOptions('StoreOffsets',true);

Пакет линеаризует объект в обрезанных рабочих точках, с помощью заданных точек ввода-вывода и изменений параметра.

[linsys,linop,info] = linearize(mdl,blockpath,op,params,options);

Можно использовать смещения в info.Offsets при конфигурировании блока LPV System.

info.Offsets
ans = 

  3x4 struct array with fields:

    x
    dx
    u
    y
    StateName
    InputName
    OutputName
    Ts

Входные параметры

свернуть все

Имя модели Simulink в виде вектора символов или строки. Модель должна быть в текущей рабочей папке или на пути MATLAB.

Аналитический набор точки, который содержит входные параметры, выходные параметры и открытия в виде объекта I/O линеаризации или вектора объектов ввода-вывода линеаризации. Создать io:

  • Задайте входные параметры, выходные параметры и открытия с помощью linio.

  • Если входные параметры, выходные параметры и открытия заданы в модели Simulink, извлекают эти точки из модели с помощью getlinio.

Каждый объект I/O линеаризации в io должен соответствовать модели Simulink mdl или некоторая модель - ссылка режима normal mode в иерархии модели.

Если вы не используете io, затем linearize использует корневой импорт уровня и выходные порты модели, когда анализ указывает.

Для получения дополнительной информации об определении входных параметров линеаризации видят выходные параметры и открытия, Задают Фрагмент Модели, чтобы Линеаризовать.

Рабочая точка для линеаризации в виде одного из следующего:

  • Объект рабочей точки, созданное использование:

    • operpoint

    • findop или с одной спецификацией рабочей точки, или с одно время снимка состояния.

  • Массив объектов рабочей точки, задавая несколько рабочих точек. Чтобы создать массив объектов рабочей точки, вы можете:

  • Вектор положительных скалярных величин, представляющих один или несколько раз снимка состояния симуляции. Программное обеспечение симулирует sys и линеаризует модель в заданные времена снимка состояния.

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

Если вы задаете изменения параметра с помощью param, и параметры:

  • Влияйте на рабочую точку модели, затем задайте op как массив рабочих точек с теми же размерностями как сетка значения параметров. Чтобы получить рабочие точки, которые соответствуют комбинациям значения параметров, обработайте обрезку в пакетном режиме ваша модель с помощью param перед линеаризацией. Для получения дополнительной информации смотрите, что Пакет Линеаризует Модель в Нескольких Рабочих точках, Выведенных из Изменений Параметра.

  • Не влияйте на рабочую точку модели, затем задавайте op как одна рабочая точка.

Блок или подсистема, чтобы линеаризовать в виде вектора символов или строки, которая содержит ее полный блок path.

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

Замените линеаризацией блоки и подсистемы в виде структуры или n-by-1 массив структур, где n является количеством блоков, для которых вы хотите задать линеаризацию. Используйте blocksub задавать пользовательскую линеаризацию для блока или подсистемы. Например, можно задать линеаризацию для блоков, которые не имеют аналитической линеаризации, такой как блоки с разрывами или инициированными подсистемами.

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

Каждая структура линеаризации замены имеет следующие поля:

Блок path блока, для которого вы хотите задать линеаризацию в виде вектора символов или строки.

Замените линеаризацией блок в виде одного из следующего:

  • Дважды — Задают линеаризацию блока SISO как усиление.

  • Массив типа double — Задает линеаризацию блока MIMO как nu-by-ny массив значений усиления, где nu является количеством входных параметров, и ny является количеством выходных параметров.

  • Модель LTI, неопределенная модель в пространстве состояний или неопределенный действительный объект — настройка ввода-вывода заданной модели должны совпадать с настройкой блока, заданного Name. Используя неопределенную модель требует программного обеспечения Robust Control Toolbox™.

  • Массив моделей LTI, неопределенных моделей в пространстве состояний или неопределенных действительных объектов — Пакет линеаризует модель с помощью нескольких замен блока. Настройка ввода-вывода каждой модели в массиве должна совпадать с настройкой блока, для которого вы задаете пользовательскую линеаризацию. Если вы:

    • Варьируйтесь параметры модели с помощью param и задайте Value как массив моделей, размерности Value должен совпадать с размером сетки параметра.

    • Задайте op как массив рабочих точек и Value как массив моделей, размерности Value должен совпадать с размером op.

    • Замены блока Define на несколько блоков, и задают Value как массив моделей LTI для одного или нескольких из этих блоков, должны соответствовать размерности массивов.

  • Структура со следующими полями:

    Поле Описание
    Specification

    Блокируйте линеаризацию в виде вектора символов, который содержит одно из следующего:

    Заданное выражение или функция должны возвратить одно из следующего:

    • Линейная модель в форме D-матрицы

    • Объект модели LTI Control System Toolbox™

    • Неопределенная модель в пространстве состояний или неопределенный действительный объект (требует программного обеспечения Robust Control Toolbox),

    Настройка ввода-вывода возвращенной модели должна совпадать с настройкой блока, заданного Name.

    Type

    Тип спецификации в виде одного из следующего:

    • 'Expression'

    • 'Function'

    ParameterNames

    Имена параметров функции линеаризации в виде массива ячеек из символьных векторов. Задайте ParameterNames только, когда Type = 'Function' и ваша функция линеаризации блока требует входных параметров. Эти параметры только влияют на линеаризацию заданного блока.

    Необходимо также задать соответствующий blocksub.Value.ParameterValues поле .

    ParameterValues

    Значения параметра функции линеаризации в виде вектора удваиваются. Порядок значений параметров должен соответствовать порядку названий параметра в blocksub.Value.ParameterNames. Задайте ParameterValues только, когда Type = 'Function' и ваша функция линеаризации блока требует входных параметров.

Выборки параметра для линеаризации в виде одного из следующего:

  • Структура — Варьируется значение одного параметра путем определения param как структура со следующими полями:

    • Name — Название параметра в виде вектора символов или строки. Можно задать любой параметр модели, который является переменной в рабочем пространстве модели, рабочем пространстве MATLAB или словаре данных. Если переменная, используемая моделью, не является скалярной переменной, задайте название параметра как выражение, которое решает к значению числового скаляра. Например, чтобы использовать первый элемент векторного V в качестве параметра, использование:

      param.Name = 'V(1)';
    • Value — Демонстрационные значения параметра в виде двойного массива.

    Например, варьируйтесь значение параметра A в 10%-й области значений:

    param.Name = 'A';
    param.Value = linspace(0.9*A,1.1*A,3);
  • Массив структур — Варьируется значение нескольких параметров. Например, варьируйтесь значения параметров A и b в 10%-й области значений:

    [A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),...
                             linspace(0.9*b,1.1*b,3));
    params(1).Name = 'A';
    params(1).Value = A_grid;
    params(2).Name = 'b';
    params(2).Value = b_grid;

Для получения дополнительной информации смотрите, Задают Выборки Параметра для Пакетной Линеаризации.

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

Чтобы вычислить смещения, требуемые блоком LPV System, задайте param, и набор options.StoreOffsets к true. Можно затем возвратить дополнительную информацию о линеаризации в info, и извлеките смещения с помощью getOffsetsForLPV.

Порядок состояний в линеаризации заканчивается в виде массива ячеек путей к блоку или имен состояния. Порядок путей к блоку и состояний в stateorder указывает на порядок состояний в linsys.

Можно задать пути к блоку для любых блоков в mdl это имеет состояния или любые именованные состояния в mdl.

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

Опции алгоритма линеаризации в виде linearizeOptions опция установлена.

Выходные аргументы

свернуть все

Результат линеаризации, возвращенный как модель в пространстве состояний или массив моделей в пространстве состояний. Размерности linsys зависьте от заданных изменений параметра и замен блока и рабочих точек, в которых вы линеаризуете модель.

Примечание

Если вы задаете больше чем один из op, param, или blocksub.Value как массив, затем должны соответствовать их размерности.

Изменение параметраБлокируйте заменуЛинеаризуйте в...Получившийся linsys Размерности
Никакое изменение параметраНикакая замена блокаРабочая точка моделиОдна модель в пространстве состояний
Одна рабочая точка в виде объекта рабочей точки или время снимка состояния с помощью op
N1-by-...- Nm массив объектов рабочей точки, заданных opN1-by-...- Nm
Ns создает снимки в виде вектора времен снимка состояния с помощью opВектор-столбец длины Ns
N1-by-...- Nm массив моделей по крайней мере для одного блока, заданного blocksub.ValueРабочая точка моделиN1-by-...- Nm
Одна рабочая точка в виде объекта рабочей точки или время снимка состояния с помощью op
N1-by-...- Nm массив рабочих точек в виде массива объектов рабочей точки с помощью op
Ns создает снимки в виде вектора времен снимка состояния с помощью opNs-by-N1-by-...- Nm
N1-by-...- Nm сетка параметра, заданная paramИли никакая замена блока или N1-by-...- Nm массив моделей по крайней мере для одного блока, заданного blocksub.ValueРабочая точка моделиN1-by-...- Nm
Одна рабочая точка в виде объекта рабочей точки или время снимка состояния с помощью op
N1-by-...- Nm массив объектов рабочей точки, заданных op
Ns создает снимки в виде вектора времен снимка состояния с помощью opNs-by-N1-by-...- Nm

Например, предположите:

  • op 4 3 массив объектов рабочей точки, и вы не задаете изменения параметра или блокируете замены. В этом случае, linsys 4 3 массив моделей.

  • op один объект рабочей точки и param задает 3 4 2 сетками параметра. В этом случае, linsys 3 4 2 массивами моделей.

  • op вектор-строка из положительных скалярных величин с двумя элементами, и вы не задаете param. В этом случае, linsys вектор-столбец с двумя элементами.

  • op вектор-столбец положительных скалярных величин с тремя элементами и param задает 5 6 сетка параметра. В этом случае, linsys 3 5 6 массивами моделей.

  • op один объект рабочей точки, вы не задаете изменения параметра и blocksub.Value 2 3 массив моделей для одного блока в модели. В этом случае, linsys 2 3 массив моделей.

  • op вектор-столбец положительных скалярных величин с четырьмя элементами, вы не задаете изменения параметра и blocksub.Value 1 2 массив моделей для одного блока в модели. В этом случае, linsys 4 1 2 массивами моделей.

Для получения дополнительной информации о массивах моделей смотрите Массивы моделей (Control System Toolbox).

Рабочая точка, в которой линеаризовалась модель, возвратилась как объект рабочей точки или массив объектов рабочей точки с теми же размерностями как linsys. Каждый элемент linop рабочая точка в который соответствующий linsys модель была получена.

Если вы задаете op как одна рабочая точка возражают или массив объектов рабочей точки, затем linop копия op. Если вы задаете op как одна рабочая точка возражают и также задают изменения параметра с помощью param, затем linop массив с теми же размерностями как сетка параметра. В этом случае, элементы linop скалярные расширенные копии op.

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

Информация о линеаризации, возвращенная как структура со следующими полями:

Смещения линеаризации, которые соответствуют рабочей точке, в которой линеаризовалась модель, возвратились как [] если options.StoreOffsets false. В противном случае, Offsets возвращен как одно из следующего:

  • Если linsys одна модель в пространстве состояний, затем Offsets структура.

  • Если linsys массив моделей в пространстве состояний, затем Offsets массив структур с теми же размерностями как linsys.

Каждая структура смещения имеет следующие поля:

Поле Описание
xСмещения состояния использовали в линеаризации, возвращенной как вектор-столбец длины nx, где nx является количеством состояний в linsys.
yВыведите смещения, используемые в линеаризации, возвращенной как вектор-столбец длины ny, где ny является количеством выходных параметров в linsys.
uВведите смещения, используемые в линеаризации, возвращенной как вектор-столбец длины nu, где nu является количеством входных параметров в linsys.
dxПроизводные смещения для непрерывных систем времени или обновленные значения состояния для систем дискретного времени, возвращенных как вектор-столбец длины nx.
StateNameИмена состояния, возвращенные как массив ячеек, который содержит элементы nx, которые совпадают с именами в linsys.StateName.
InputNameВведите имена, возвращенные как массив ячеек, который содержит элементы nu, которые совпадают с именами в linsys.InputName.
OutputNameВыведите имена, возвращенные как массив ячеек, который содержит элементы ny, которые совпадают с именами в linsys.OutputName.
TsШаг расчета линеаризованной системы, возвращенной как скаляр, который совпадает с шагом расчета в linsys.Ts. Для систем непрерывного времени, Ts 0.

Если Offsets массив структур, можно сконфигурировать блок LPV System с помощью смещений. Для этого сначала преобразуйте их в требуемый формат с помощью getOffsetsForLPV. Для примера смотрите, что Аппроксимирующее Нелинейное Поведение Использует Массив Систем LTI.

Информация о диагностике линеаризации, возвращенная как [] если options.StoreAdvisor false. В противном случае, Advisor возвращен как одно из следующего:

  • Если linsys одна модель в пространстве состояний, Advisor LinearizationAdvisor объект.

  • Если linsys массив моделей в пространстве состояний, Advisor массив LinearizationAdvisor объекты с теми же размерностями как linsys.

LinearizationAdvisor объекты хранят информацию диагностики линеаризации для линеаризовавших блоков индивидуума. Для примера поиска и устранения неисправностей результатов линеаризации с помощью LinearizationAdvisor возразите, смотрите Результаты Линеаризации Поиска и устранения неисправностей в Командной строке.

Больше о

свернуть все

Пользовательская функция линеаризации

Можно задать линеаризацию замены для блока или подсистемы в модели Simulink с помощью пользовательской функции на пути MATLAB.

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

Поле Описание
BlockNameИмя блока, для которого вы задаете пользовательскую линеаризацию.
ParametersЗначения параметров блоков в виде массива структур с Name и Value поля . Parameters содержит имена и значения параметров, которые вы задаете в blocksub.Value.ParameterNames и blocksub.Value.ParameterValues поля .
Inputs

Входные сигналы с блоком, для которого вы задаете линеаризацию в виде массива структур с одной структурой для каждого входа блока. Каждая структура в Inputs имеет следующие поля:

Поле Описание
BlockNameПолный блок path блока, выход которого соединяется с соответствующим введенным блоком.
PortIndexВыходной порт блока задан BlockName это соединяется с соответствующим входом блока.
ValuesЗначение сигнала задано BlockName и PortIndex. Если этот сигнал является векторным сигналом, то Values вектор с той же размерностью.
nyКоличество выходных каналов линеаризации блока.
nuКоличество входных каналов линеаризации блока.
BlockLinearizationТекущая линеаризация по умолчанию блока в виде модели в пространстве состояний. Можно задать линеаризацию блока, которая зависит от линеаризации по умолчанию с помощью BlockLinearization.

Ваша пользовательская функция должна возвратить модель с nu входные параметры и ny выходные параметры . Эта модель должна быть одним из следующего:

  • Линейная модель в форме D-матрицы

  • Объект модели LTI Control System Toolbox

  • Неопределенная модель в пространстве состояний или неопределенный действительный объект (требует программного обеспечения Robust Control Toolbox),

Например, следующая функция умножает текущую линеаризацию блока по умолчанию задержкой Td = 0.5 секунды. Задержка представлена фильтром Thiran с шагом расчета Ts = 0.1. Задержка и шаг расчета являются параметрами, сохраненными в BlockData.

function sys = myCustomFunction(BlockData)
    Td = BlockData.Parameters(1).Value;
    Ts = BlockData.Parameters(2).Value;
    sys = BlockData.BlockLinearization*Thiran(Td,Ts);
end 

Сохраните эту функцию в местоположение на пути MATLAB.

Чтобы использовать эту функцию в качестве пользовательской линеаризации для блока или подсистемы, задайте blocksub.Value.Specification и blocksub.Value.Type поля .

blocksub.Value.Specification = 'myCustomFunction';
blocksub.Value.Type = 'Function';

Чтобы установить задержку и значения параметров шага расчета, задайте blocksub.Value.ParameterNames и blocksub.Value.ParameterValues поля .

blocksub.Value.ParameterNames = {'Td','Ts'};
blocksub.Value.ParameterValues = [0.5 0.1];

Алгоритмы

свернуть все

Свойства модели для линеаризации

По умолчанию, linearize автоматически устанавливает следующие свойства модели Simulink:

  • BufferReuse = 'off'

  • RTWInlineParameters = 'on'

  • BlockReductionOpt = 'off'

  • SaveFormat = 'StructureWithTime'

После линеаризации Simulink восстанавливает исходные свойства модели.

Линеаризация блока блоком

Программное обеспечение Simulink Control Design™ линеаризует модели с помощью подхода блока блоком. Программное обеспечение индивидуально линеаризует каждый блок в вашей модели Simulink и производит линеаризацию полной системы путем объединения отдельной линеаризации блока.

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

Для некоторых блоков программное обеспечение не может вычислить аналитическую линеаризацию этим способом. Например:

  • Некоторая нелинейность не имеет заданного якобиана.

  • Некоторые дискретные блоки, такие как диаграммы состояний и инициированные подсистемы, имеют тенденцию линеаризовать, чтобы обнулить.

  • Некоторые блоки не реализуют якобиан.

  • Пользовательские блоки, такие как блоки S-Function и блоки MATLAB Function, не имеют аналитических Якобианов.

Можно задать пользовательскую линеаризацию для любых таких блоков, для которых вы знаете ожидаемую линеаризацию. Если вы не задаете пользовательскую линеаризацию, программное обеспечение линеаризует модель путем беспокойства входных параметров блока и состояний и измерения ответа на эти возмущения. Для каждого входа и состояния, уровень возмущения по умолчанию:

  • 105(1+|x|) для значений с двойной точностью.

  • 0.005(1+|x|) для значений с одинарной точностью.

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

Для получения дополнительной информации смотрите, Линеаризуют Нелинейные Модели и Точный Алгоритм Линеаризации

Числовое возмущение полное модели

Можно линеаризовать систему с помощью полной модели числовое возмущение, где программное обеспечение вычисляет линеаризацию полной модели путем беспокойства значений входных параметров корневого уровня и состояний. Для этого создайте linearizeOptions объект и набор LinearizationAlgorithm свойство к одному из следующего:

  • 'numericalpert' — Встревожьте входные параметры и состояния с помощью правых разностей; то есть, путем добавления возмущений во вход и значения состояния. Этот метод возмущения обычно быстрее, чем 'numericalpert2' метод.

  • 'numericalpert2' — Встревожьте входные параметры и состояния с помощью центральных различий; то есть, путем беспокойства входа и значений состояния и в положительных и в отрицательных направлениях. Этот метод возмущения обычно более точен, чем 'numericalpert' метод.

Для каждого входа и состояния, программное обеспечение тревожит модель и вычисляет линейное основанное на модели на ответе модели на эти возмущения. Можно сконфигурировать состояние и ввести уровни возмущения с помощью NumericalPertRel опции линеаризации.

Линеаризация блока блоком имеет несколько преимуществ перед полной моделью числовое возмущение:

  • Большинство блоков Simulink имеет предварительно запрограммированную линеаризацию, которая обеспечивает точную линеаризацию блока.

  • Можно использовать линейные аналитические точки, чтобы задать фрагмент модели, чтобы линеаризовать.

  • Можно сконфигурировать блоки, чтобы использовать пользовательскую линеаризацию, не влияя симуляцию модели.

  • Структурно неминимальные состояния автоматически удалены.

  • Можно задать линеаризацию, которая включает неопределенность (требует программного обеспечения Robust Control Toolbox).

  • Можно получить подробную диагностическую информацию.

  • При линеаризации многоскоростных моделей можно использовать различные методы преобразования уровня. Числовое возмущение полное модели может только использовать нулевой порядок "преобразования уровня, содержат".

Для получения дополнительной информации смотрите, Линеаризуют Нелинейные Модели и Точный Алгоритм Линеаризации.

Альтернативы

Как альтернатива linearize функция, можно линеаризовать модели с помощью одного из следующих методов:

Несмотря на то, что и программное обеспечение Simulink Control Design и linmod Simulink функция выполняет линеаризацию блока блоком, функциональность линеаризации Simulink Control Design имеет более гибкий пользовательский интерфейс и использует Control System Toolbox числовые алгоритмы. Для получения дополнительной информации смотрите, что Линеаризация Использует Simulink Control Design По сравнению с Simulink.

Введен в R2006a