Преобразуйте систему дифференциальных алгебраических уравнений в указатель на функцию 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.