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