daeFunction

Преобразуйте систему дифференциальных алгебраических уравнений к указателю функции MATLAB, подходящему для ode15i

Синтаксис

f = daeFunction(eqs,vars)
f = daeFunction(eqs,vars,p1,...,pN)
f = daeFunction(___,Name,Value)

Описание

пример

f = daeFunction(eqs,vars) преобразовывает систему символьных дифференциальных алгебраических уравнений первого порядка (ДАУ) к указателю на функцию MATLAB®, приемлемому как входной параметр к числовому решателю ДАУ MATLAB ode15i.

пример

f = daeFunction(eqs,vars,p1,...,pN) позволяет вам задать символьные параметры системы как p1,...,pN.

пример

f = daeFunction(___,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары Name,Value.

Примеры

свернуть все

Создайте систему дифференциальных алгебраических уравнений. Здесь, символьные функции x1(t) и x2(t) представляют переменные состояния системы. Система также содержит постоянные символьные параметры a, b и функция параметра r(t). Эти параметры не представляют переменные состояния. Задайте уравнения и переменные состояния как два символьных вектора: уравнения как вектор символьных уравнений и переменные как вектор символьных вызовов функции.

syms x1(t) x2(t) a b r(t)
eqs = [diff(x1(t),t) == a*x1(t) + b*x2(t)^2,...
       x1(t)^2 + x2(t)^2 == r(t)^2];
vars = [x1(t), x2(t)];

Используйте daeFunction, чтобы сгенерировать указатель функции MATLAB f в зависимости от переменных x1(t), x2(t) и на параметрах a, b, r(t).

f = daeFunction(eqs, vars, a, b, r(t))
f = 
  function_handle with value:
    @(t,in2,in3,param1,param2,param3)[in3(1,:)-param1.*in2(1,:)...
-param2.*in2(2,:).^2;-param3.^2+in2(1,:).^2+in2(2,:).^2]

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

a = -0.6;
b = -0.1;
r = @(t) cos(t)/(1 + t^2);
F = @(t, Y, YP) f(t,Y,YP,a,b,r(t));

Задайте сопоставимые начальные условия для системы ДАУ.

t0 = 0;
y0 = [-r(t0)*sin(0.1); r(t0)*cos(0.1)];
yp0= [a*y0(1) + b*y0(2)^2; 1.234];

Теперь, используйте ode15i, чтобы решить систему уравнений.

ode15i(F, [t0, 1], y0, yp0)

Запишите сгенерированный указатель на функцию в файл путем определения опции File. При записи в файл daeFunction оптимизирует код с помощью промежуточных переменных под названием t0, t1. … Включают комментарии в файл с помощью опции Comments.

Запишите сгенерированный указатель на функцию в файл myfile.

syms x1(t) x2(t) a b r(t)
eqs = [diff(x1(t),t) == a*x1(t) + b*x2(t)^2,...
       x1(t)^2 + x2(t)^2 == r(t)^2];
vars = [x1(t), x2(t)];
daeFunction(eqs, vars, a, b, r(t), 'File', 'myfile')
function eqs = myfile(t,in2,in3,param1,param2,param3)
%MYFILE
%    EQS = MYFILE(T,IN2,IN3,PARAM1,PARAM2,PARAM3)

%    This function was generated by the Symbolic Math Toolbox version 7.3.
%    01-Jan-2017 00:00:00

YP1 = in3(1,:);
x1 = in2(1,:);
x2 = in2(2,:);
t2 = x2.^2;
eqs = [YP1-param2.*t2-param1.*x1;t2-param3.^2+x1.^2];

Включайте комментарий Version: 1.1.

daeFunction(eqs, vars, a, b, r(t), 'File', 'myfile',...
                    'Comments','Version: 1.1');
function eqs = myfile(t,in2,in3,param4,param5,param6)
...
%Version: 1.1
YP3 = in3(1,:);
...

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

свернуть все

Система ДАУ первого порядка, заданных как вектор символьных уравнений или выражений. Здесь, выражения представляют уравнения с нулевой правой стороной.

Переменные состояния, заданные как вектор символьных функций или вызовов функции, таких как x(t).

Пример: [x(t),y(t)] или [x(t);y(t)]

Параметры системы, заданной как символьные переменные, функции или вызовы функции, такие как f(t). Можно также задать параметры системы как вектор или матрица символьных переменных, функций или вызовов функции. Если eqs содержит символьные параметры кроме переменных, заданных в vars, необходимо задать эти дополнительные параметры как p1,...,pN.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: daeFunction(eqns,vars,'File','myfile')

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

Путь к файлу, содержащему сгенерированный код, заданный как вектор символов. Сгенерированный файл принимает аргументы типа double и может использоваться без Symbolic Math Toolbox™. Если значение является пустым символьным вектором, odeFunction генерирует анонимную функцию. Если вектор символов не заканчивается в .m, функция добавляет .m.

По умолчанию daeFunction с аргументом File генерирует файл, содержащий оптимизированный код. Оптимизированные средние значения промежуточные переменные автоматически сгенерированы, чтобы упростить или ускорить код. MATLAB генерирует промежуточные переменные как строчную букву t, сопровождаемый автоматически сгенерированным номером, например, t32. Чтобы отключить оптимизацию кода, используйте аргумент Optimize.

Отметьте предотвращение оптимизации кода, записанного в файл функции, заданный как false или true.

По умолчанию daeFunction с аргументом File генерирует файл, содержащий оптимизированный код. Оптимизированные средние значения промежуточные переменные автоматически сгенерированы, чтобы упростить или ускорить код. MATLAB генерирует промежуточные переменные как строчную букву t, сопровождаемый автоматически сгенерированным номером, например, t32.

daeFunction без аргумента File (или с путем к файлу, заданным пустым символьным вектором), создает указатель на функцию. В этом случае код не оптимизирован. При попытке осуществить оптимизацию кода установкой Optimize к true, то daeFunction выдает ошибку.

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

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

свернуть все

Указатель на функцию, который может служить входным параметром к ode15i, возвратился как указатель функции MATLAB.

Введенный в R2014b