Преобразуйте символьные выражения в указатель на функцию для решателей ОДУ
f = odeFunction(expr,vars)
f = odeFunction(expr,vars,p1,...,pN)
f = odeFunction(___,Name,Value)
дополнительные опции использования заданы одним или несколькими аргументами пары 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 ode15s
.
odefun = odeFunction(f,vars); ode15s(odefun, [0 10], initConditions)
Преобразуйте систему символьных дифференциальных уравнений, содержащих обе переменные состояния и символьные параметры к указателю на функцию, подходящему для решателей ОДУ 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
относятся к форме .
[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)
Система алгебраических выраженийСистема алгебраических выражений, заданных как вектор символьных выражений.
вар
Переменные состоянияПеременные состояния, заданные как вектор символьных функций или вызовов функции, таких как x(t)
.
Пример: [x(t),y(t)]
или [x(t);y(t)]
p1,...,pN
— Параметры системыПараметры системы, заданной как символьные переменные, функции или вызовы функции, такие как f(t)
. Можно также задать параметры системы как вектор или матрица символьных переменных, функций или вызовов функции. Если expr
содержит символьные параметры кроме переменных, заданных в vars
, необходимо задать эти дополнительные параметры как p1,...,pN
.
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
odeFunction(expr,vars,'File','myfile')
Комментарии
Комментарии, чтобы включать в заголовок файлаКомментарии, чтобы включать в заголовок файла, заданный как вектор символов, массив ячеек из символьных векторов или вектор строки.
'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
выдает ошибку.
разреженный
Отметьте, который переключается между разреженной и плотной генерацией матрицыfalse
(значение по умолчанию) | true
Отметьте, который переключается между разреженной и плотной генерацией матрицы, заданной как true
или false
. Когда вы задаете 'Sparse',true
, сгенерированная функция представляет символьные матрицы разреженными числовыми матрицами. Используйте 'Sparse',true
, когда вы преобразуете символьные матрицы, содержащие много нулевых элементов. Часто, операции на разреженных матрицах более эффективны, чем те же операции на плотных матрицах. Смотрите Разреженные матрицы.
f
Указатель на функцию, который вводится к числовым решателям ОДУ MATLAB, кроме 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.