Как решать дифференциальные уравнения в mathcad

Foodband

MathCAD — это просто! Часть 20. Страх и ужас: дифференциальные уравнения

Если вы спросите студентов естественнонаучных и технических специальностей, какую часть высшей математики они "любят" больше всего, то в трех четвертях случаев в ответ услышите именно "дифференциальные уравнения". И действительно, именно диффуры становятся нередко тем самым гранитом науки, который студентам приходится в буквальном смысле грызть. Впрочем, грызть его в силу применения диффуров в различных практических отраслях человеческой деятельности приходится и специалистам, ВУЗ уже давно закончившим. Но им, в отличие от студентов, можно немного облегчить себе жизнь — даже, пожалуй, не немного, а весьма ощутимо — благодаря тому, что такой мощный математический пакет, как MathCAD, поддерживает решение дифференциальных уравнений ничуть не хуже, чем многие другие операции, о которых мы с вами говорили. Студентам, конечно, MathCAD тоже может помочь, но, увы, не при изучении дифференциальных уравнений — вряд ли преподаватели будут в восторге, если принести распечатанное решение такого уравнения в MathCAD’е. Впрочем, не суть важно, студент вы или нет, ведь если вы решили постичь премудрости работы с дифференциальными уравнениями в среде MathCAD — значит, вам зачем-то это нужно…

Как и в прошлый раз, когда мы говорили с вами о такой важной части математики, как комплексные числа, я позволю себе небольшое отступление от темы работы в MathCAD’е для рассказа о том, что же такое, собственно говоря, эти самые дифференциальные уравнения, и почему они вызывают ужас у студентов. В справочнике по математике можно найти определение вроде: "дифференциальным уравнением называют уравнение вида f(y1, y2, …, yn, ?y1/?x1, …, ?y1/?xm, … ?myn/?x1…?xm, x1, …, xm) = 0, где ?jyi/?xk…?xk+j — производная функции yi под аргументам xk…xk+j". На самом же деле, несмотря на то, что написанное выше определение может быть не слишком удобным для восприятия — все довольно просто. Дифференциальное уравнение — это такое уравнение, в котором есть одна или несколько функций и их производные. И задача того, кто решает такое уравнение, — найти все функции, при котором бы оно превращалось в тождество (было справедливым при любом значении аргумента).
Выделяют два больших класса дифференциальных уравнений: обыкновенные дифференциальные уравнения и уравнения в частных производных. В обыкновенных дифференциальных уравнениях фигурируют функции одной переменной, а потому все производные в них полные. Дифференциальные уравнения в частных производных, напротив, содержат в себе функции нескольких переменных и частные производные этих функций по разным переменным. Понятно, что решать обыкновенные дифференциальные уравнения куда проще, но встречаются они, к сожалению, реже, потому что все более-менее важные обыкновенные дифференциальные уравнения давным-давно решены, а их решения записаны в справочники и учебники по математике и физике. Разработаны специальные приемы, которые позволяют хорошо и быстро решать отдельные типы дифференциальных уравнений. Тем не менее, несмотря на то, что эти уравнения известны человечеству уже не одну сотню лет, до сих пор не существует универсального способа, позволяющего аналитически решить любое дифференциальное уравнение. Поэтому при решении этих уравнений в среде MathCAD лучше тоже заранее подготовиться к тому, что далеко не все из того, что вы захотите решить с помощью этого математического пакета, и в самом деле будет решаться. Сейчас мы с вами рассмотрим разные типы дифференциальных уравнений, которые решаются аналитически с применением к ним различных подходов. А в следующий раз посмотрим на то, как можно численно решать дифференциальные уравнения, не теряя времени на определение того, к какому именно типу они принадлежат.

Интегрирование

В конечном счете решение дифференциального уравнения рано или поздно так или иначе явно или неявно, но сводится к интегрированию каких-либо функций. А потому во многих случаях имеет смысл сразу, с места в карьер, приступать к интегрированию. Давайте рассмотрим уравнение вида dy/dx = p(x)*y + q(x), где p и q — некоторые интегрируемые функции. Общее решение подобного вида уравнений вы можете увидеть на приведенной ниже формуле:

Собственно, эта формула — уже фактически готовое решение дифференциального уравнения (напомню, что C1 — это некоторая константа, которая обозначена так потому, что идентификаторы C и c уже заняты стандартными переменными среды MathCAD). Если вместо p(x) и q(x) мы подставим какие- либо конкретные значения коэффициентов, фигурирующих в уравнении, то, если все интегралы окажутся берущимися, среда MathCAD самостоятельно сможет рассчитать решение этого уравнения. Давайте посмотрим на примере, как это может выглядеть:

Аналогичным образом можно поступить, найдя в справочнике формулы для некоторых других видов дифференциальных уравнений. Правда, стоит помнить, что результаты интегрирования, выдаваемые символьным процессором MathCAD’а, стоит перепроверять — но сделать это совсем не сложно путем простой подстановки. А сейчас мы поговорим о другом способе аналитического решения уравнений, который более универсален и требует применения некоторых операторов символьного вычисления, о которых мы с вами не так давно говорили.

Операционное исчисление

Не так давно мы говорили о прямом и обратном преобразованиях Лапласа, которые очень активно применяются при решении дифференциальных уравнений методами операционного исчисления. Операционное исчисление, конечно же, тоже не гарантирует вам того, что ваше уравнение обязательно решится, однако это более универсальный способ, чем использование отдельных формул, специфических для каждого из видов обыкновенных дифференциальных уравнений. Хотя я уже рассказывал о сути операционного исчисления, тем не менее, полагаю, что, если повторю свой рассказ, вряд ли это кому-то повредит. Преобразованием Лапласа мы получаем новые функции комплексных переменных, которые называются изображениями (в то время, как старые функции действительных переменных называются оригиналами). Новые функции образуют между собой новое уравнение, называемое операторным — в отличие от старого, дифференциального, оно алгебраическое. После решения операторного уравнения, которое решить значительно проще, чем исходное, можно вернуться к старым переменным, и получить решение исходного дифференциального уравнения.

Стоит, конечно же, сказать, что операционное исчисление — тоже совсем не панацея, поскольку оно накладывает ряд ограничений на функцию, подвергаемую преобразованию Лапласа. Первое из этих ограничений — необходимость непрерывности функции (допускается наличие только конечного числа разрывов первого рода). Второе ограничение — функция должна иметь нулевые значения для всех отрицательных значений аргумента. Ну и, наконец, функция должна возрастать медленнее экспоненты (впрочем, последнее условие выполнить сравнительно несложно, поскольку на самом деле оно несколько сложнее, чем я его вам изложил). Что ж, давайте посмотрим, как мы можем применить операционное исчисление к дифференциальным уравнениям в MathCAD’е. Для начала выберем уравнение, которое будем решать. Пусть это будет, например, d2F(t)/dx2 + F(t) — cos(2t) = 0. Левую часть этого уравнения нужно подвергнуть преобразованию Лапласа, то есть, говоря по-русски, действию оператора laplace. То, что получится в итоге, можно увидеть ниже.

Это не совсем подходящее выражение для его последующего "скармливания" оператору solve, а потому надо кое-что поменять. А именно — записать в человеческом виде начальные значения функции F и ее производной F(0) и F'(0) (мы их запишем как F0 и Fd0 соответственно). Также нужно записать как-то покороче выражение laplace(F(t),t,s), которое мы, следуя традициям операционных методов, назовем буквой z. Это выражение — та переменная, относительно которой мы будем решать операторное уравнение. Вот так и должно выглядеть его решение, если вы сделали все так, как я вам говорил:

Теперь дело за малым — нам нужно выполнить обратное преобразование Лапласа для того, чтобы от изображения перейти назад к оригиналу, то есть фактически и получить решение нашего исходного дифференциального уравнения d2F(t)/dx2 + F(t) — cos(2t) = 0. Для этого, если вы помните, нужно использовать оператор invlaplace, о котором мы говорили тогда же, когда разбирали и все остальные операторы символьных преобразований. Вот что у нас с вами должно получиться после того, как мы это сделаем:

Конечно, полученное решение с большой натяжкой можно назвать не то что изящным, но даже и просто сколь-нибудь приличным, потому что к нему стоит применить еще некоторые операторы. Какие? Этот вопрос оставим вам на самостоятельное изучение — вернее сказать, даже не на изучение, а на повторение, поскольку обо всех операторах символьных вычислений, какие только могут вам потребоваться, я уже рассказывал в серии "MathCAD — это просто!". Так что, если вы внимательно читали каждую из статей, то у вас не будет проблем с дальнейшим приведением этого выражения в приличный вид.

Что ж, как видите, MathCAD в очередной раз оказался силен — именно поэтому я не устаю петь дифирамбы этому пакету как мощному математическому инструменту, удобному, ко всему прочему, в практической работе. Решать дифференциальные уравнения с помощь MathCAD’а, как я уже говорил, совсем и не сложно — даже если сейчас вам показалось, что процесс их решения занимает много времени, уверяю вас, это мелочи по сравнению с тем временем, которое вы бы затратили на то, чтобы решить их вручную. Конечно, аналитический способ решения не дает вам 100- процентной гарантии успеха, как, впрочем, и всегда, но зато можно воспользоваться решением численным. Но это, как говорится, уже совсем другая история…

SF, spaceflyer@tut.by

Компьютерная газета. Статья была опубликована в номере 34 за 2008 год в рубрике soft

Решение дифференциальных уравнений в mathcad. Стандартная форма дифференциальных уравнений

Стандартная форма дифференциальных уравнений

Уравнения высших порядков сводятся к уравнению первого порядка. Например:

, где

Вводятся новые функции:

,

Получается система уравнений в стандартной форме:

Тогда вектор производных

Решение обыкновенных дифференциальных уравнений

Для решения обыкновенных дифференциальных уравнений в mathcad используется функция odesolve в блоке given.

Аналитического решения на экран не выводится. Решение выдаётся в виде вектора значений функции. Полученная в виде таблицы значений функция поддаётся дифференцированию. Функция-производная также получается в виде вектора значений. Знак производной y’ вводится одновременным нажатием клавиш <ctrl>, <F7>.


Формат вызова функции:

odesolve (x, xk, n)

x – переменная, по которой ведётся диффеенцирование;

xk – верхняя граница интервала, на котором ищется решение;

n – необязательный параметр – количество точек, на которое разбивается интеграл для численного поиска решения; если не задан, то подбирается;

Нижняя граница интервала, на котором ищется решение, берётся из начальных условий.

С помощью функции odesolve решаются уравнения высших порядков. Тогда в начальные условия добавляются значения всех n-1 производных в начальной точке, если уравнение n-го порядка.

Функция odesolve позволяет решать двухточечные краевые задачи (дифференциальные уравнения с заданными значениями в нижней и верхней границах отрезка). Тогда начальные условия

Решение систем дифференциальных уравнений

Система должна быть записана в форме Коши:

– начальные условия (значения искомых функций в точке x0);

– вектор первых производных искомых функций;

Функции mathcad для решения систем дифференциальных уравнений:

1) rkfixed (y, x0, xk, n, F) – возвращает матрицу значений функции.

y – вектор начальных условий;

x0 – нижняя граница интервала, на котором ищется решение;

xk – верхняя граница интервала, на котором ищется решение;

n – количество точек на интервале;

F – вектор первых производных искомых функций;

Используется метод Рунге-Кутта с фиксированным шагом.

2) Rkadapt (y, x0, xk, n, F) – возвращает матрицу значений функции.

Параметры такие же, как и в предыдущей функции. Отличие от предыдущей функции: в rkadapt шаг изменяется автоматически, поэтому эта функция работает медленнее, в rkfixed шаг фиксированный. Если функция изменяется медленно, то выгоднее пользоваться функцией rkadapt, так как это ведёт к уменьшению числа шагов. Используется адаптируемый метод Рунге-Кутта.

Foodband

3) rkadapt (y, x0, xk, acc, F, k, S) – возвращает матрицу значений функции. Используется адаптируемый метод Рунге-Кутта. Количество шагов определяется точностью.

y – вектор начальных условий;

x0 – нижняя граница интервала, на котором ищется решение;

xk – верхняя граница интервала, на котором ищется решение;

acc – точность, чем меньше тем медленнее работает функция;

F – вектор первых производных искомых функций;

k – максимальное число точек на интервале;

S – минимальная разница между значениями функции в соседних точках;

4) bulstoer (y, x0, xk, acc, F, k, S) – возвращает матрицу значений решения системы обыкновенных дифференциальных уравнений. Параметры такие же, как и в предыдущей функции. Используется, если предполагается, что искомая функция и её производная гладкие и непрерывные на заданном интервале. Матрица значений решений рассчитывается по методу Булирша-Штера.

Примеры вызова данных функций для системы уравнений, данной выше:

rkadapt (y, 0, 5, 0.001, F, 0.0001)

bulstoer (y, 0, 5, 0.001, F, 0.0001)

5) Stiffb (y, x0, xk, n, F, J) – возвращает матрицу решений жёсткого дифференциального уравнения. Для расчёта используется метод Булиша-Штера

6) stiffb(y, x0, xk, acc, n, F, J) – возвращает матрицу решений в конечной точке жёсткого дифференциального уравнения. Для расчёта используется метод Булиша-Штера с переменным шагом;

7) Stiffr (y, x0, xk, n, F, J) – возвращает матрицу решений жёсткого дифференциального уравнения. Используется метод Розенброка;

8) stiffr(y, x0, xk, acc, F, J, k, S) – возвращает матрицу решений в конечной точке жёсткого дифференциального уравнения. Используется метод Розенброка с переменным шагом;

где все параметры, кроме J, те же, что и в предыдущих формулах.

J – матрица Якоби (якобиан), имеет следующий вид:

Размерность этой матрицы n(n+1).

Как решать дифференциальные уравнения в mathcad

Вы здесь: Всё о Mathcad />Всё о Mathcad />Дифференциальное уравнение

Функции предназначенные для решения обыкновенных дифференциальных уравнений в Mathcad

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

  • odesolve(x,b,step) — используется для решения обыкновенного дифференциального уравнения, заданного как в виде задачи Коши, так и в виде краевой задачи. Начальные условия и дифференциальное уравнение должны быть определены в блоке given. Параметры функции: х –переменная, по которой производится интегрирование; b — конечное значение промежутка решения; step – величина шага численного метода (параметр необязательный).
  • rkfixed(u,a,b,N,D) – реализует в Mathcad численное решение задачи Коши по методу Рунге – Кутта с фиксированным шагом. Имеет следующие преимущества перед odesolve(x,b,step): может быть использована в программных модулях и позволяет оперативно пересчитывать результаты при изменении параметров. Параметры функции: u-вектор начальных условий; a и b – граничные значения отрезка решения задачи; N – число интервалов разбиения отрезка [a,b]; D(x,y) –вектор-функция, содержащая правые части первых производных, записанные в символьном виде.
  • Rkadapt(u, a,b, N, D) — возвращает матрицу в Mathcad, содержащую таблицу значений решения задачи Коши на интервале от a до b для уравнения или системы обыкновенных дифференциальных уравнений, вычисленную методом Рунге-Кутта с переменным шагом и начальными условиями в векторе u, D(x,y) –вектор функция, содержащая правые части первых производных, записанная в символьном виде, n — число шагов.
  • Функция Rkadapt() вследствие автоматического подбора шага, как правило, дает более точный результат по сравнению с другими функциями в Mathcad.

Метод конечных разностей в Mathcad

В случае краевых задач для линейных дифференциальных уравнений в Mathcad применяются формулы для аппроксимации производных соответствующими конечно – разностными отношениями. Это позволяет свести решение дифференциальных уравнений к решению системы линейных уравнений. Результаты получают в дискретных i – ых точках интервала решения задачи. При этом отрезок [a,b] разбивается на n частей с шагом h =(b-a)/n. Для аппроксимации соответствующих производных в Mathcad используют следующие формулы:

Метод конечных разностей в Mathcad

Таким образом, сделав соответствующую замену, получаем систему линейных уравнений, решение которой средствами Mathcad не представляет сложностей. Решение задачи методом конечных разностей приведено на листинге

Метод конечных разностей в Mathcad

Задача Коши в Mathcad

Задача Коши в Mathcad для дифференциальных уравнений n-го порядка с одной неизвестной (обыкновенное дифференциальное уравнение — ОДУ) формулируется следующим образом. Найти решение дифференциального уравнения

Задача Коши в Mathcad

в виде функции y=y(x), которая удовлетворяет заданным начальным условиям

Задача Коши в Mathcad

где Задача Коши в Mathcad— заданные значение. Решение задачи Коши для обыкновенных дифференциальных уравнений второго и более высоких порядков можно свести к системе уравнений. Решение задачи Коши для ОДУ первого порядка в Mathcad с использованием различных функций приведено на листинге.

Наибольшее распространение для решения задачи Коши в Mathcad получил метод Рунге – Кутта. Суть метода состоит в последовательном отыскании искомого значения функции yi+1 по формуле

Задача Коши в Mathcad

За h принимается достаточно малый шаг, с помощью которого весь интервал задачи Коши разбивается на дискретные точки, в которых и ищется решение. Погрешность результатов пропорциональна пятой степени шага (h5).

Геометрический смысл метода Рунге – Кутта состоит в следующем. Из очередной точки (xi,yi) выбирается направление (угол) , для которого tg()=f(xi,yi). На этом направлении вычисляется точка с координатами Задача Коши в MathcadЗатем из точки (xi,yi) выбирается направление (угол) , для которого

tg()=fЗадача Коши в MathcadРешение задачи Коши

На этом направлении вычисляется точка с координатами Решение задачи Коши Далее из точки (xi,yi) выбирается направление (угол) , для которого Решение задачи Коши

На этом направлении в Mathcad вычисляется точка с координатами Решение задачи КошиПосле чего из точки (xi,yi) выбирается направление (угол) , для которого Решение задачи Коши. Все четыре полученных направления усредняются в соответствии с формулой для расчета . На этом результирующем направлении и строится расчетная точка с координатами

Решение задачи Коши

Метод Рунге – Кутта благодаря высокой точности широко используется при численном решении дифференциальных уравнений и в частности в Mathcad. Существует несколько разновидностей данного метода, которые нашли свое отражение в рассмотренных выше функциях. На листинге можно не только сравнить результаты, полученные на основе различных функций, но и оценить эти результаты с позиций точности расчетов.

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

Краевые задачи в Mathcad

Краевые задачи в Mathcad отличаются от задачи Коши состоит тем, что в краевой задаче начальные условия задаются на концах интервала поиска решения. Для решения подобных задач в системе Mathcad используется метод пристрелки, который начальное условие в правой точке интервала преобразует в дополнительное начальное условие для левой точки интервала. После чего краевая задача трансформируется в задачу Коши, методы решения которой были рассмотрены в предыдущем разделе. Для реализации метода пристрелки в Mathcad существует функция sbval. Данная функция определяет недостающие условия в начальной точке для двухточечных краевых задач. Функция имеет следующий синтаксис sbval(z,a,b,D,load,score), где z – вектор приближений недостающих начальных условий на левой границе; a,b – левая и правая граница интервала решений; D(x,y) – вектор-функция, содержащая правые части первых производных, записанная в символьном виде; load(a,z) – вектор-функция, описывающая начальные условия на левой границе интервала; score(b,y) – вектор-функция для задания правых граничных условий. Пример решения краевой задачи приведен на листинге.

Краевые задачи

Дифференциальное уравнение в Mathcad

Функции предназначенные для решения обыкновенных дифференциальных уравнений

Для решения дифференциальных уравнений и систем дифференциальных уравнений в Mathсad введен ряд функций.

Решение задачи Коши

Задача Коши для дифференциальных уравнений n-го порядка с одной неизвестной.

Краевые задачи

Разница краевой задачи и задачи Коши состоит в том, где задается интервала поиска решения.

Метод конечных разностей

В Mathcad в краевых задачах для уравнений применяются формулы для аппроксимации производных соответствующими отношениями.

Foodband

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *