Преобразуйте систему дифференциальных алгебраических уравнений в указатель на функцию 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
, 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
- Система ДАУ первого порядкаСистема ДАУ первого порядка, заданная как вектор символьных уравнений или выражений. Здесь выражения представляют уравнения с нулевой правой стороной.
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.
decic
| findDecoupledBlocks
| incidenceMatrix
| isLowIndexDAE
| massMatrixForm
| matlabFunction
| ode15i
| odeFunction
| reduceDAEIndex
| reduceDAEToODE
| reduceDifferentialOrder
| reduceRedundancies
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.