ode
::solve
Решение обыкновенных дифференциальных уравнений
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
ode::solve(o
,options
) solve(o
,options
)
ode::solve
вычисляет решения для обыкновенных дифференциальных уравнений.
ode::solve(o)
возвращает набор решений обыкновенного дифференциального уравнения o
. Можно также вызвать родовую функцию solve(o)
.
Решатель обнаруживает тип дифференциального уравнения и выбирает алгоритм согласно обнаруженному типу уравнения. Если вы знаете тип уравнения, можно использовать опцию Type
= OdeType
передать тип уравнения решателю. Передача уравнения вводит к производительности увеличений решателя.
Решатель распознает следующие значения OdeType
:
Abel
- Дифференциальное уравнение Абеля
Bernoulli
- Бернуллиевое дифференциальное уравнение
Chini
- Дифференциальное уравнение Chini
Clairaut
- Дифференциальное уравнение Клеро
ExactFirstOrder
- точное обыкновенное дифференциальное уравнение первого порядка
ExactSecondOrder
- точное обыкновенное дифференциальное уравнение второго порядка
Homogeneous
- гомогенное обыкновенное дифференциальное уравнение первого порядка
Lagrange
- Лагранжево дифференциальное уравнение
Riccati
- Дифференциальное уравнение Riccati
Дополнительную информацию см. в разделе Background по классам обыкновенных дифференциальных уравнений.
Если решатель не может идентифицировать уравнение с типом, вы указали, это выдает предупреждение и возвращает специальное значение FAIL
.
Чтобы решить обыкновенное дифференциальное уравнение, игнорируя возможные условия на параметрах уравнения, используйте IgnoreSpecialCases
опция. Эта опция устраняет получение набора особых случаев как ответ.
Чтобы решить обыкновенное дифференциальное уравнение упрощенным способом, используйте IgnoreAnalyticConstraints
опция. Эта опция может предоставить простые решения для уравнений, для которых прямое использование решателя дает сложные результаты. Если вы используете IgnoreAnalyticConstraints
опция, всегда проверяйте ответ. Эта опция может привести к неправильным или неполным результатам. Смотрите Пример 3.
Решения обыкновенных дифференциальных уравнений могут содержать произвольные постоянные интегрирования. Решатель генерирует константы интегрирования с помощью формата прописной буквы C
сопровождаемый автоматически сгенерированным номером, например, C13
.
Решатель не всегда проверяет уникальность и полноту возвращенного решения. Например:
Решатель не подтверждает липшицевы условия на обыкновенном дифференциальном уравнении для Теоремы Пикара-Линделефа.
Для некоторых комплексных нелинейных систем дифференциальных уравнений решатель возвращает постоянные решения и не предупреждает вас, что другие решения существуют.
Решатель может проигнорировать предположения, что вы устанавливаете на символьных параметрах и переменных или используете их только частично. Более точно, ode::solve
предположения передач функциям, что это вызывает внутренне. В то время как эти функции могут использовать заданные предположения, ode::solve
самостоятельно не использует их в большинстве его внутренних алгоритмов. То же самое происходит, если вы задаете обыкновенное дифференциальное уравнение с помощью ode
и решите его с помощью solve
.
Чтобы задать обыкновенное дифференциальное уравнение, используйте ode
команда:
o:= ode(y'(x) = y(x)^2, y(x))
Решить уравнение, введите:
ode::solve(o)
или более эффективно:
solve(o)
Внутренне, функциональный ode::solve
вызывает функциональный solve
.
Можно решить обыкновенное дифференциальное уравнение символьным параметром и начальным условием:
o:= ode({y'(x) = a*y(x)^2, y(a) = ln(a)}, y(x)): solve(o)
Чтобы сократить количество возвращенных решений, используйте опцию IgnoreSpecialCases
. Например, можно пропустить решение для параметра a = 1:
solve(o, IgnoreSpecialCases)
С IgnoreSpecialCases
опция, возвращенный набор решений может быть неполным.
Решатель может возвратить piecewise
решения:
o:= ode(y'(x) = a/y(x)^2 + b*y(x), y(x)): solve(o)
Это решение завершено, и математически откорректируйте для всех возможных значений параметра a и переменную x. Также можно попробовать опцию IgnoreAnalyticConstraints
чтобы получить конкретное решение, которое правильно под набором общих предположений:
solve(o, IgnoreAnalyticConstraints)
Решатель принимает несколько опций:
solve(o, Type = Bernoulli, IgnoreAnalyticConstraints)
Предположим, вы хотите решить обыкновенное дифференциальное уравнение от класса Бернуллиевых уравнений:
o:= ode(y'(x) = (- 1/x + 2*I)*y(x) + 1/x*y(x)^2, y(x)): solve(o)
Решатель распознает тип уравнения и использует алгоритм в решении Бернуллиевых уравнений. Чтобы улучшать производительность, можно явным образом передать тип уравнения к решателю:
solve(o, Type = Bernoulli)
Решить уравнение Клеро с начальными условиями, введите:
o:= ode({(x*y'(x)-y(x))^2 - y'(x)^2 - 1 = 0, y(1) = 1}, y(x)): solve(o, Type = Clairaut)
Если решатель не может идентифицировать уравнение с типом, вы указали, это выдает предупреждение и возвращает специальное значение FAIL
:
o:= ode({(x*y'(x)-y(x))^2 - y'(x)^2 - 1 = 0, y(1) = 1}, y(x)): solve(o, Type = Lagrange)
Warning: Unable to detect Lagrange ODE. [ode::lagrange]
Некоторые обыкновенные дифференциальные уравнения принадлежат нескольким классам. Например, некоторые уравнения Chini являются также гомогенными, и некоторые Лагранжевы уравнения являются также уравнениями Клеро. Если уравнение принадлежит нескольким классам одновременно, решатель может представить свое решение в различных формах. Форма решения зависит от класса, с которым идентифицировано уравнение. Например, предположите, что вы хотите решить дифференциальное уравнение Chini. Можно явным образом передать тип уравнения к решателю:
o:= ode(y'(x) = 1/x*y(x)^2 + 1/x*y(x) + x, y(x)): L:= solve(o, Type = Chini)
Также можно позволить решателю распознать тип уравнения:
solve(o)
Решатель не возвращает тип, с которым внутренне идентифицировано обыкновенное дифференциальное уравнение. Если вы хотите проверить, что оба набора решения эквивалентны, используйте rewrite
функция с целевым exp
на первом наборе решений:
rewrite(L, exp)
MuPAD® решает некоторые классы обыкновенных дифференциальных уравнений Riccati, которые включают произвольные функции. Например, следующее уравнение содержит произвольный функциональный f(x)
:
eq := diff(y(x), x) - f(x)*y(x)^2 + a^2*x^(2*n)*f(x) - a*n*x^(n - 1)
Для этого уравнения возвращается решатель:
solve(ode(eq,y(x)))
Также можно решить уравнение больше чем с одной произвольной функцией. Например, следующие уравнения содержат f(x)
и g(x)
:
eq:= diff(y(x), x) - g(x)*f(x)*y(x) - g(x) - diff(f(x), x)*y(x)^2
Возвращенное решение:
solve(ode(eq,y(x)))
Предположим, вы хотите решить следующее обыкновенное дифференциальное уравнение второго порядка:
eq := x^2*(x^2 + 1)*diff(y(x),x,x) + x*(2*x^2 + 1)*diff(y(x),x) - (nu*(nu + 1)*x^2 + n^2)*y(x)
Решатель возвращает результат в терминах гипергеометрической функции 1F2 (см. hypergeom
):
solve(ode(eq,y(x)))
Решатель может обработать некоторую треть - и обыкновенные дифференциальные уравнения высшего порядка. Например, решите следующие линейные дифференциальные уравнения третьего порядка:
eq := ode(sin(x)*y'''(x) + cos(x)*y(x), y(x)): solve(eq)
eq := ode(6*y(x) + x^3*y'''(x), y(x)): solve(eq)
Решатель также может обработать некоторые нелинейные обыкновенные дифференциальные уравнения первого порядка. Например, решите следующие линейные дифференциальные уравнения первого порядка:
eq := ode(y(x)*diff(y(x), x) - y(x) - x^3 - 4*x^4 - 4*x^7, y(x)): solve(eq)
eq := ode(exp(x/2)/4 - 2*exp(x) - y(x) + x*exp(x/2) + y(x)*y'(x), y(x)): solve(eq)
|
Обыкновенное дифференциальное уравнение, объект типа |
|
Опция, заданная как Указывает на тип обыкновенного дифференциального уравнения и принимает следующие аргументы: |
|
Опция, заданная как Передайте опцию типовому решателю, который называется внутренне для всех промежуточных уравнений. См. список опций для |
|
Передайте опцию типовому решателю, который называется внутренне для всех промежуточных уравнений, и к интегратору |
|
Передайте опцию типовому решателю, который называется внутренне для всех промежуточных уравнений, и к интегратору |
Набор решений обыкновенного дифференциального уравнения или специального значения FAIL
. Для получения дополнительной информации о возвращаемых значениях смотрите solve
страница справки.
Для получения дополнительной информации о конкретных классах обыкновенных дифференциальных уравнений см.:
Э. Камк: Differentialgleichungen: Lösungmethoden und Lösungen. Б.Г. Теубнер, Штутгарт, 1997
Г.М. Мерфи: Обыкновенные дифференциальные уравнения и их решения. Ван Нострэнд, Принстон, 1960
Андрей Д. Полианин и Валентин Ф. Зайцев: Руководство точных решений для обыкновенных дифференциальных уравнений, второго редактора, Chapman & Hall/CRC, Бока-Ратон, FL, 2003
Д. Цвиллингер: Руководство дифференциальных уравнений. Сан-Диего: Academic Press, 1992