ode
Область обыкновенных дифференциальных уравнений
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
ode(eq
,y(x)
) ode({eq, <inits>}
,y(x)
) ode({eq1, eq2, , …, <inits>}
,{y1(x), y2(x), …}
)
ode(eq, y(x))
представляет обыкновенное дифференциальное уравнение (ODE) для функционального y(x)
.
ode({eq1, eq2, ...}, {y1(x), y2(x), ...})
представляет систему ОДУ для функций y1(x)
, y2(x)
и т.д.
В уравнениях eq
, eq1
и т.д., неизвестные функции должны быть представлены y(x)
, y1(x)
и т.д. Производные могут быть представлены или функцией diff
или дифференциальным оператором D
. Обратите внимание на то, что маркерный '
обеспечивает удобный ярлык: y'(x) = D(y)(x)
означает то же самое как diff(y(x), x)
.
Неизвестные функции должны быть одномерными в независимой переменной x
. Многомерные выражения, такие как y(x, t)
не приняты.
Функция ode
не принимает вход piecewise
.
Начальные и граничные условия заданы последовательностями уравнений, включающих неизвестные функции или их производные на левой стороне. Соответствующие значения должны быть заданы на правой стороне уравнений. В частности, дифференциальный оператор D
(или маркерный '
) должен использоваться, чтобы задать значения производных в какой-то момент. Например,
допустимая последовательность граничных условий для inits
.
Граничные условия первого и второго вида позволены. Смешанные условия не приняты.
Начальная буква/граничные точки и соответствующая начальная буква/граничные значения могут быть символьными выражениями.
Для скалярного начального значения или краевых задач, используйте ode({eq, inits}, y(x))
, чтобы задать условия.
Для систем ОДУ должно быть столько же уравнений сколько неизвестные функции.
Основная цель области ode
состоит в том, чтобы обеспечить среду для перегрузки функционального solve
.
В случае одного одного уравнения (возможно вместе с начальными или граничными условиями), solve
возвращает набор явных решений или неявного решения. Каждый элемент набора представляет ответвление решения.
В случае системы уравнений solve
возвращает набор списков уравнений для неизвестных функций. Каждый список представляет ответвление решения.
На символьный звонок solve
отвечают, если никакое решение не найдено.
В следующем мы показываем, как создать и решить скалярный ОДУ. Во-первых, мы задаем ОДУ. Мы используем лексему кавычки '
, чтобы представлять производные:
eq := ode(x^2*y'(x) + 3*x*y(x) = sin(x)/x, y(x))
Мы получаем элемент доменного ode
, который мы можем теперь решить:
solve(eq)
delete eq:
Задача с начальными значениями задана как набор, состоящий из ОДУ и начальных условий:
ivp := ode({f''(t) + 4*f(t) = sin(2*t), f(0) = a, f'(0) = b}, f(t))
solve(ivp)
delete ivp:
С некоторыми ограничениями также возможно решить системы ОДУ. Во-первых, задайте систему:
sys := {x'(t) - x(t) + y(t) = 0, y'(t) - x(t) - y(t) = 0}
Вызов solve
приводит к общему решению с произвольными параметрами:
solution := solve(ode(sys, {x(t), y(t)}))
Чтобы проверить результат, замените им назад в систему sys
. Однако для замены, необходимо переписать систему в обозначение с помощью функции diff
:
eval(subs(rewrite(sys, diff), op(solution)))
delete sys, solution:
Если вы имеете систему дифференциальных уравнений в матричной форме, извлекаете компоненты матрицы к набору дифференциальных уравнений:
Y:= matrix([x(t), y(t)]): A:= matrix([[1, 2], [-1, 6]]): s := ode({op(diff(Y, t) - A*Y)}, {x(t), y(t)})
Теперь, используйте функцию solve
, чтобы решить систему:
solve(s)
В этом примере мы указываем, что различные форматы возврата ode
решают средство. Во-первых, мы решаем ОДУ с начальным условием. Решение включает символьный интеграл:
solve(ode({y'(x) + x*y(x) = cos(x), y(0) = 3}, y(x)))
Для следующего уравнения мы получаем неявное решение:
solve(ode((x*y'(x) - y(x))^4*exp(x*y'(x) - y(x)) - ln(x*y'(x) - y(x)), y(x)))
Это - алгебраическое уравнение для y
. Его решение задает y
как функцию x
и произвольного параметра C
, сопровождаемый номером, автоматически сгенерированным MuPAD® (постоянный из интегрирования). Однако алгебраическое уравнение не имеет решения в закрытой форме.
delete sys, solution:
Это может произойти, что MuPAD не может решить данное уравнение. В таком случае возвращена символьная команда solve
:
solve(ode(x*diff(y(x),x)-y(x)*(x*ln(x^3/y(x))+2), y(x)))
Решатель ОДУ MuPAD содержит алгебраические алгоритмы для вычисления Liouvillian и non-Liouvillian решений линейных обыкновенных дифференциальных уравнений. Эти алгоритмы основаны на дифференциале теория Галуа и на дополнительных методах для нахождения решений линейных обыкновенных дифференциальных уравнений, данных с точки зрения специальных функций. Для примера известного Ковэкика
,
решение может быть найдено как:
solve(ode(y''(x) + (3/(16*x^2) + 2/(9*(x - 1)^2) - 3/(16*x*(x - 1)))*y(x), y(x)))
MuPAD может найти Liouvillian и non-Liouvillian решения для уравнений высшего порядка также. Однако в случае решений Liouvillian, нет никакой гарантии, что все они найдены.
MuPAD также находит non-Liouvillian решения с точки зрения функции Бесселя, Эйри и функций Уиттекера:
eq := y'(x) + y(x)^2 + b + a*x
solve(ode(eq, y(x)))
Мы проверяем это решение:
simplify(eval(subs(rewrite(eq, diff), y(x) = op(%))))
Также возможно вычислить серийные решения обыкновенного дифференциального уравнения (cf. ode::series
для получения дальнейшей информации):
series(ode(y''(x) + 4*y(x) = sin(w*x), y(x)), x = 0, 8)
|
Уравнения или арифметические выражения в неизвестных функциях и их производных относительно |
|
Неизвестные функции: идентификаторы |
|
Независимая переменная: идентификатор |
|
Начальные или граничные условия: последовательность уравнений |
Объект типа ode
.
[1] Э. Камк. “Differentialgleichungen: Lösungmethoden und Lösungen”. Б.Г. Теубнер, Штутгарт, 1997.
[2] Г.М. Мерфи. “Обыкновенные дифференциальные уравнения и их решения”. Ван Нострэнд, Принстон, 1960.
[3] Д. Цвиллингер. “Руководство дифференциальных уравнений”. Сан-Диего: Academic Press, 1992.
[4] В. Фэклер. Algebraische Algorithmen zur Lösung von linearen Differentialgleichungen. Штутгарт, Лейпциг: Teubner, Отчеты Reihe MuPAD, 1999.
[5] М. ван дер Пут и М.Ф. Зингер. “Теория Галуа линейных дифференциальных уравнений”. Grundlehren der Mathematischen Wissenschaften, 328, Springer-Verlag, Берлин, 2003.
[6] Ф. Алмер и М.Ф. Зингер. Liouvillian и алгебраические решения вторых и третьих линейных дифференциальных уравнений порядка. “Дж. Симб. Аккомпанируйте”, 16:37-74, 1993.