Преобразуйте систему дифференциальных алгебраических уравнений к указателю функции MATLAB, подходящему для ode15i
дополнительные опции использования заданы одним или несколькими 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
rt
.
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,:); ...
eqs
— Система ДАУ первого порядкаСистема ДАУ первого порядка в виде вектора из символьных уравнений или выражений. Здесь, выражения представляют уравнения нулевой правой стороной.
vars
— Переменные состоянияПеременные состояния в виде вектора из символьных функций или вызовов функции, таких как x(t)
.
Пример: [x(t),y(t)]
или [x(t);y(t)]
p1,...,pN
— Параметры системыПараметры системы в виде символьных переменных, функций или вызовов функции, таких как f(t)
. Можно также задать параметры системы как вектор или матрица символьных переменных, функций или вызовов функции. Если eqs
содержит символьные параметры кроме переменных, заданных в vars
, необходимо задать эти дополнительные параметры как p1,...,pN
.
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
daeFunction(eqns,vars,'File','myfile')
Comments
— Комментарии, чтобы включать в заголовок файлаКомментарии, чтобы включать в заголовок файла в виде вектора символов, массива ячеек из символьных векторов или вектора строки.
File
— Путь к файлу, содержащему сгенерированный кодПуть к файлу, содержащему сгенерированный код в виде вектора символов. Сгенерированный файл принимает аргументы типа double
, и может использоваться без Symbolic Math Toolbox™. Если значение является пустым символьным вектором, odeFunction
генерирует анонимную функцию. Если вектор символов не заканчивается в .m
, функция добавляет .m
.
По умолчанию, daeFunction
с File
аргумент генерирует файл, содержащий оптимизированный код. Оптимизированные средние значения промежуточные переменные автоматически сгенерированы, чтобы упростить или ускорить код. MATLAB генерирует промежуточные переменные как строчную букву t
сопровождаемый автоматически сгенерированным номером, например, t32
. Чтобы отключить оптимизацию кода, используйте Optimize
аргумент.
Optimize
— Отметьте предотвращение оптимизации кода, записанного в файл функцииtrue
(значение по умолчанию) | false
Отметьте предотвращение оптимизации кода, записанного в файл функции в виде false
или true
.
По умолчанию, daeFunction
с File
аргумент генерирует файл, содержащий оптимизированный код. Оптимизированные средние значения промежуточные переменные автоматически сгенерированы, чтобы упростить или ускорить код. MATLAB генерирует промежуточные переменные как строчную букву t
сопровождаемый автоматически сгенерированным номером, например, t32
.
daeFunction
без File
аргумент (или с путем к файлу, заданным пустым символьным вектором), создает указатель на функцию. В этом случае код не оптимизирован. При попытке осуществить оптимизацию кода установкой Optimize
к true
то daeFunction
выдает ошибку.
Sparse
— Отметьте, который переключается между разреженной и плотной генерацией матрицыfalse
(значение по умолчанию) | true
Отметьте, который переключается между разреженной и плотной генерацией матрицы в виде true
или false
. Когда вы задаете 'Sparse',true
, сгенерированная функция представляет символьные матрицы разреженными числовыми матрицами. Используйте 'Sparse',true
когда вы преобразуете символьные матрицы, содержащие много нулевых элементов. Часто, операции на разреженных матрицах более эффективны, чем те же операции на плотных матрицах.
f
— Указатель на функцию, который может служить входным параметром к ode15i
Указатель на функцию, который может служить входным параметром к ode15i
, возвращенный как указатель функции MATLAB.
findDecoupledBlocks
| decic
| incidenceMatrix
| isLowIndexDAE
| massMatrixForm
| matlabFunction
| ode15i
| odeFunction
| reduceDAEIndex
| reduceDAEToODE
| reduceDifferentialOrder
| reduceRedundancies
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.