daeFunction

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

Описание

пример

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) представляйте переменные состояния системы. Система также содержит постоянные символьные параметры aB, и параметр функционирует 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) и на параметрах aBrt .

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 оптимизирует код с помощью промежуточных переменных под названием t0t1 . … Включают комментарии в файл с помощью 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