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