linearize

Линейное приближение модели или подсистемы Simulink

Описание

пример

linsys = linearize(mdl,io) возвращает линейное приближение нелинейного Simulink® модели mdl в рабочей точке модели с помощью точек анализа, заданных в 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)

Задайте вход линеаризации на выходе блока ПИД-регулятор, который является входным сигналом для блока 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)

Укажите полный путь к блоку, который необходимо линеаризировать.

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);

Укажите путь блока для блока, который необходимо линеаризировать.

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, которые соответствуют заданным параметрическим узлам сетки.

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

blockpath = 'watertank/Desired  Water Level';

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

options = linearizeOptions('StoreOffsets',true);

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

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

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

info.Offsets
ans = 

  3x4 struct array with fields:

    x
    dx
    u
    y
    StateName
    InputName
    OutputName
    Ts

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

свернуть все

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

Набор точек анализа, который содержит входы, выходы и открытия, заданные как объект ввода-вывода линеаризации или вектор объектов ввода-вывода линеаризации. Создание io:

  • Задайте входы, выходы и открытия, используя linio.

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

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

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

Для получения дополнительной информации об указании входов, выходов и открытий линеаризации, см. Раздел «Задание фрагмента модели для линеаризации».

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

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

    • operpoint

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Double - Задайте линеаризацию блока SISO как коэффициент усиления.

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

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

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

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

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

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

  • Структурируйте следующие поля.

    ОбластьОписание
    Specification

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

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

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

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

    • Модель неопределенного пространства состояний или неопределенный реальный объект (требует программного обеспечения 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 в области значений:

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

    [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.

Для получения дополнительной информации об массивах моделей см. Раздел «Массивы моделей».

Рабочая точка, в которой модель была линеаризирована, возвращена как объект рабочей точки или массив объектов рабочей точки с такими же размерностями, как 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Полный путь блока, выход которого соединяется с соответствующим входом блока.
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 и производит линеаризацию всей системы путем объединения отдельных линеаризаций блоков.

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

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

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

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

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

  • Пользовательские блоки, такие как блоки 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, и Simulink linmod функция выполняет блочную линеаризацию, функциональность линеаризации Simulink Control Design имеет более гибкий пользовательский интерфейс и использует числовые алгоритмы Control System Toolbox. Для получения дополнительной информации смотрите Linearization Using Simulink Control Design Versus Simulink.

Введенный в R2006a