daeFunction

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

Описание

пример

f = daeFunction(eqs,vars) преобразует систему символьных дифференциальных алгебраических уравнений первого порядка (ДАУ) в MATLAB® указатель на функцию, приемлемый как входной параметр для числового решателя DAE 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)

Figure contains an axes. The axes contains 4 objects of type line.

Запишите указатель на сгенерированную функцию в файл путем определения 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 - имя аргумента и 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