линеаризовать

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

Синтаксис

linsys = linearize(mdl,io)
linsys = linearize(mdl,io,op)
linsys = linearize(mdl,io,param)
linsys = linearize(mdl,io,blocksub)
linsys = linearize(mdl,io,options)
linsys = linearize(mdl,io,op,param,blocksub,options)
linsys = linearize(mdl,blockpath)
linsys = linearize(mdl,blockpath,op)
linsys = linearize(mdl,blockpath,param)
linsys = linearize(mdl,blockpath,blocksub)
linsys = linearize(mdl,blockpath,options)
linsys = linearize(mdl,blockpath,op,param,blocksub,options)
linsys = linearize(___,'StateOrder',stateorder)
[linsys,linop] = linearize(___)
[linsys,linop,info] = linearize(___)

Описание

пример

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 сеткой значения параметров, где каждый узел решетки соответствует уникальной комбинации значений Ki1 и Kp1.

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

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 и линеаризуйте модель в секундах 10 и 0. Возвратите рабочие точки, которые соответствуют этим временам снимка состояния; то есть, рабочие точки, в которых линеаризовалась модель.

[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 как усиление.

  • Массив удваивается — Задают линеаризацию блока 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 как структуры со следующими полями:

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

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

    Например, отличайтесь значение параметра 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-...-by-Nm массив объектов рабочей точки, заданных opN1-by-...-by-Nm
Снимки состояния Ns, заданные как вектор времен снимка состояния с помощью opВектор-столбец длины Ns
N1-by-...-by-Nm образцовый массив по крайней мере для одного блока, заданного blocksub.ValueОбразцовая рабочая точкаN1-by-...-by-Nm
Одна рабочая точка, заданная как объект рабочей точки или время снимка состояния с помощью op
N1-by-...-by-Nm массив рабочих точек, заданных как массив объектов рабочей точки с помощью op
Снимки состояния Ns, заданные как вектор времен снимка состояния с помощью opNs-by-N1-by-...-by-Nm
N1-by-...-by-Nm сетка параметра, заданная paramИли никакая замена блока или N1-by-...-by-Nm образцовый массив по крайней мере для одного блока, заданного blocksub.ValueОбразцовая рабочая точкаN1-by-...-by-Nm
Одна рабочая точка, заданная как объект рабочей точки или время снимка состояния с помощью op
N1-by-...-by-Nm массив объектов рабочей точки, заданных op
Снимки состояния Ns, заданные как вектор времен снимка состояния с помощью opNs-by-N1-by-...-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|), где 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