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