Преобразуйте символьные выражения в указатель на функцию для решателей ОДУ
использует дополнительные опции, заданные одним или несколькими f = odeFunction(___,Name,Value)Name,Value аргументы в виде пар.
Преобразуйте систему символьных дифференциальных алгебраических уравнений в указатель на функцию, подходящий для решателей ОДУ MATLAB. Затем решите систему, используя ode15s решатель.
Создайте следующее дифференциальное алгебраическое уравнение второго порядка.
syms y(t); eqn = diff(y(t),t,2) == (1-y(t)^2)*diff(y(t),t) - y(t);
Использовать reduceDifferentialOrder переписать это уравнение как систему двух дифференциальных уравнений первого порядка. Здесь, vars является вектором переменных состояния системы. Новая переменная Dy(t) представляет первую производную y(t) относительно t.
[eqs,vars] = reduceDifferentialOrder(eqn,y(t))
eqs =
diff(Dyt(t), t) + y(t) + Dyt(t)*(y(t)^2 - 1)
Dyt(t) - diff(y(t), t)
vars =
y(t)
Dyt(t)Установите начальные условия для y(t) и его производную Dy(t) на 2 и 0 соответственно.
initConditions = [2 0];
Найдите большую матрицу M системы и правых сторон уравнений F.
[M,F] = massMatrixForm(eqs,vars)
M =
[ 0, 1]
[ -1, 0]
F =
- y(t) - Dyt(t)*(y(t)^2 - 1)
-Dyt(t)M и F см. форму . Чтобы упростить дальнейшие расчеты, перепишите систему в форме .
f = M\F
f =
Dyt(t)
- Dyt(t)*y(t)^2 - y(t) + Dyt(t)Преобразование f в указатель на функцию MATLAB при помощи odeFunction. Получившийся указатель на функцию вводится в решатель MATLAB ODE ode15s.
odefun = odeFunction(f,vars); ode15s(odefun, [0 10], initConditions)

Преобразуйте систему символьных дифференциальных уравнений, содержащую как переменные состояния, так и символьные параметры, в указатель на функцию, подходящий для решателей MATLAB ODE.
Создайте систему дифференциальных алгебраических уравнений. Здесь символические функции 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)];Найдите большую матрицу M и вектор правой оси F для этой системы. M и F см. форму .
[M,F] = massMatrixForm(eqs,vars)
M =
[ 1, 0]
[ 0, 0]
F =
b*x2(t)^2 + a*x1(t)
r(t)^2 - x1(t)^2 - x2(t)^2Использовать odeFunction чтобы сгенерировать указатели на функции MATLAB из M и F. Указатель на функцию F содержит символьные параметры.
M = odeFunction(M,vars) F = odeFunction(F,vars,a,b,r(t))
M =
function_handle with value:
@(t,in2)reshape([1.0,0.0,0.0,0.0],[2,2])
F =
function_handle with value:
@(t,in2,param1,param2,param3)[param1.*in2(1,:)+...
param2.*in2(2,:).^2;param3.^2-in2(1,:).^2-in2(2,:).^2]Задайте значения параметров.
a = -0.6; b = -0.1; r = @(t) cos(t)/(1+t^2);
Создайте указатель на уменьшенную функцию F.
F = @(t,Y) F(t,Y,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];
Создайте набор опций, содержащий большую матрицу M системы и векторных yp0 начальных условий для производных.
opt = odeset('mass',M,'InitialSlope',yp0);Теперь используйте ode15s для решения системы уравнений.
ode15s(F, [t0, 1], y0, opt)

Запишите сгенерированные указатели на функцию в файлы при помощи File опция. При записи в файлы, odeFunction оптимизирует код с помощью промежуточных переменных с именем t0, t1, .… Включите комментарии в файлы путем определения Comments опция.
Задайте систему дифференциальных уравнений. Найдите большую матрицу M и правую сторону F.
syms x(t) y(t)
eqs = [diff(x(t),t)+2*diff(y(t),t) == 0.1*y(t), ...
x(t)-y(t) == cos(t)-0.2*t*sin(x(t))];
vars = [x(t) y(t)];
[M,F] = massMatrixForm(eqs,vars);Напишите код MATLAB для M и F в файлы myfileM и myfileF. odeFunction перезаписывает существующие файлы. Включите комментарий Version: 1.1 в файлах Вы можете открыть и отредактировать выходные файлы.
M = odeFunction(M,vars,'File','myfileM','Comments','Version: 1.1');
function expr = myfileM(t,in2) %MYFILEM % EXPR = MYFILEM(T,IN2) % This function was generated by the Symbolic Math Toolbox version 7.3. % 01-Jan-2017 00:00:00 %Version: 1.1 expr = reshape([1.0,0.0,2.0,0.0],[2, 2]);
F = odeFunction(F,vars,'File','myfileF','Comments','Version: 1.1');
function expr = myfileF(t,in2) %MYFILEF % EXPR = MYFILEF(T,IN2) % This function was generated by the Symbolic Math Toolbox version 7.3. % 01-Jan-2017 00:00:00 %Version: 1.1 x = in2(1,:); y = in2(2,:); expr = [y.*(1.0./1.0e1);-x+y+cos(t)-t.*sin(x).*(1.0./5.0)];
Задайте допустимые начальные значения для x(t) и y(t) и их первые производные.
xy0 = [2; 1]; % x(t) and y(t) xyp0 = [0; 0.05*xy0(2)]; % derivatives of x(t) and y(t)
Создайте набор опций, содержащий большую матрицу M, начальные условия xyp0, и числовые допуски для численного поиска.
opt = odeset('mass', M, 'RelTol', 10^(-6),...
'AbsTol', 10^(-6), 'InitialSlope', xyp0);Решить систему уравнений используя ode15s.
ode15s(F, [0 7], xy0, opt)

Используйте аргумент пары "имя-значение" 'Sparse',true при преобразовании разреженных символьных матриц в указатели на функции MATLAB.
Создайте систему дифференциальных алгебраических уравнений. Здесь символические функции x1(t) и x2(t) представляет переменные состояния системы. Задайте уравнения и переменные состояния как два символьных вектора: уравнения как вектор символьных уравнений и переменные как вектор вызовов символьных функций.
syms x1(t) x2(t)
a = -0.6;
b = -0.1;
r = @(t) cos(t)/(1 + t^2);
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)];Найдите большую матрицу M и вектор правой оси F для этой системы. M и F см. форму .
[M,F] = massMatrixForm(eqs,vars)
M =
[ 1, 0]
[ 0, 0]
F =
- (3*x1(t))/5 - x2(t)^2/10
cos(t)^2/(t^2 + 1)^2 - x1(t)^2 - x2(t)^2Сгенерируйте указатели на функции MATLAB из M и F. Потому что большинство элементов большой матрицы M являются нулями, используйте Sparse аргумент при преобразовании M.
M = odeFunction(M,vars,'Sparse',true) F = odeFunction(F,vars)
M =
function_handle with value:
@(t,in2)sparse([1],[1],[1.0],2,2)
F =
function_handle with value:
@(t,in2)[in2(1,:).*(-3.0./5.0)-in2(2,:).^2./1.0e+1;...
cos(t).^2.*1.0./(t.^2+1.0).^2-in2(1,:).^2-in2(2,:).^2]
Задайте допустимые начальные условия для системы ДАУ.
t0 = 0; y0 = [-r(t0)*sin(0.1); r(t0)*cos(0.1)]; yp0= [a*y0(1) + b*y0(2)^2; 1.234];
Создайте набор опций, содержащий большую матрицу M системы и векторных yp0 начальных условий для производных.
opt = odeset('mass',M,'InitialSlope', yp0);Решить систему уравнений используя ode15s.
ode15s(F, [t0, 1], y0, opt)

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