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.

Примеры

Пример 1

Чтобы задать обыкновенное дифференциальное уравнение, используйте команду ode:

o:= ode(y'(x) = y(x)^2, y(x))

Решить уравнение, введите:

ode::solve(o)

или более эффективно:

solve(o)

Внутренне, функциональный ode::solve вызывает функциональный solve.

Пример 2

Можно решить обыкновенное дифференциальное уравнение с символьным параметром и начальным условием:

o:= ode({y'(x) = a*y(x)^2, y(a) = ln(a)}, y(x)):
solve(o)

Чтобы сократить количество возвращенных решений, используйте опцию IgnoreSpecialCases. Например, можно пропустить решение для параметра a = 1:

solve(o, IgnoreSpecialCases)

С опцией IgnoreSpecialCases возвращенный набор решений может быть неполным.

Пример 3

Решатель может возвратить решения 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)

Пример 4

Предположим, вы хотите решить обыкновенное дифференциальное уравнение от класса Бернуллиевых уравнений:

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]

Пример 5

Некоторые обыкновенные дифференциальные уравнения принадлежат нескольким классам. Например, некоторые уравнения 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)

Пример 6

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)))

Пример 7

Предположим, вы хотите решить следующее обыкновенное дифференциальное уравнение второго порядка:

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)))

Пример 8

Решатель может обработать некоторую треть - и обыкновенные дифференциальные уравнения высшего порядка. Например, решите следующие линейные дифференциальные уравнения третьего порядка:

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)

Пример 9

Решатель также может обработать некоторые нелинейные обыкновенные дифференциальные уравнения первого порядка. Например, решите следующие линейные дифференциальные уравнения первого порядка:

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)

Параметры

o

Обыкновенное дифференциальное уравнение, объект типа ode.

Опции

Type

Опция, заданная как Type = OdeType

Указывает на тип обыкновенного дифференциального уравнения и принимает следующие аргументы: Abel, Bernoulli, Chini, Clairaut, ExactFirstOrder, ExactSecondOrder, Homogeneous, Lagrange, Riccati.

MaxDegree

Опция, заданная как MaxDegree = n

Передайте опцию типичному решателю, который называется внутренне для всех промежуточных уравнений. См. список опций для функции solve для получения дополнительной информации.

IgnoreSpecialCases

Передайте опцию типичному решателю, который называется внутренне для всех промежуточных уравнений, и к интегратору int, который называется для вычисления всех промежуточных интегралов. См. список опций для функции solve для получения дополнительной информации.

IgnoreAnalyticConstraints

Передайте опцию типичному решателю, который называется внутренне для всех промежуточных уравнений, и к интегратору int, который называется для вычисления всех промежуточных интегралов. См. список опций для функции solve для получения дополнительной информации.

Возвращаемые значения

Набор решений обыкновенного дифференциального уравнения или специального значения FAIL. Для получения дополнительной информации о возвращаемых значениях смотрите страницу справки solve.

Ссылки

Для получения дополнительной информации о конкретных классах обыкновенных дифференциальных уравнений см.:

  • Э. Камк: Differentialgleichungen: Lösungmethoden und Lösungen. Б.Г. Теубнер, Штутгарт, 1997

  • Г.М. Мерфи: Обыкновенные дифференциальные уравнения и их решения. Ван Нострэнд, Принстон, 1960

  • Андрей Д. Полианин и Валентин Ф. Зайцев: Руководство точных решений для обыкновенных дифференциальных уравнений, второго редактора, Chapman & Hall/CRC, Бока-Ратон, FL, 2003

  • Д. Цвиллингер: Руководство дифференциальных уравнений. Сан-Диего: Academic Press, 1992