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