Преобразование символьных выражений в дескриптор функции для решателей ОДУ
использует дополнительные параметры, указанные одним или несколькими f = odeFunction(___,Name,Value)Name,Value аргументы пары.
Преобразуйте систему символьных дифференциальных алгебраических уравнений в дескриптор функции, подходящий для решателей ODE 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 см. форму t, x (t)). Для упрощения дальнейших вычислений переписать систему в ) = f (t, x (t)).
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)

Преобразование системы символьных дифференциальных уравнений, содержащих как переменные состояния, так и символьные параметры, в дескриптор функции, подходящий для решателей ODE MATLAB.
Создайте систему дифференциальных алгебраических уравнений. Здесь символические функции 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 см. форму t, x (t)).
[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 см. форму t, x (t)).
[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, и может использоваться без символьных математических 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Дескриптор функции, который может служить входным аргументом для всех числовых решателей ODE 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.