Top menu

Урок 25. Дифференциальные уравнения в Mathcad

Дифференциальные уравнения очень часто применяются для описания изменяющихся процессов. Для начала рассмотрим обыкновенное дифференциальное уравнение (ОДУ):

mathcad_25_01

Аналитическое решение этого уравнения:

mathcad_25_02

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

Метод Эйлера

Наиболее простой метод решения дифференциальных уравнений – метод Эйлера. Это старый метод, легкий для понимания и программирования.

mathcad_25_03

Вычисляем изменения, шаг за шагом:

mathcad_25_04

Сравнение результата и точного решения:

mathcad_25_05

Заметьте, что решение методом Эйлера немного отличается от точного решения, и с ростом аргумента эта разница увеличивается. Уменьшить ошибку можно, если увеличить число шагов.

Блок решения ОДУ

Mathcad содержит все главные решатели дифференциальных уравнений. Их можно найти в меню Функции –> Дифференциальные уравнения. В этом уроке мы рассмотрим самый важный из них. Он прост в использовании и точен. Такой метод сочетает использование блока решения и функцию odesolve(). Перед решением определим:

mathcad_25_06

Все вхождения зависимой переменной c в блоке решения записываются как функции независимой переменной, т.е. как c(t). Есть только одно исключение – запись слева от команды odesolve().

mathcad_25_07

mathcad_25_08

Решение этим методом и аналитическое решение близки. Этот же результат можно получить, записав производную через штрих с помощью [Ctrl+’]:

mathcad_25_09

Пример: сердце и артерии

Работа сердца похожа на работу поршневого насоса: оба они расширяются и сжимаются, клапаны на входе и выходе позволяют течь только в одном направлении. Впускной клапан открывается, когда камера расширяется и позволяет крови попасть в сердце из вены. При сжатии камеры впускной клапан закрывается, и кровь выбрасывается в артерию. Выпускной клапан закрывается, когда камера начинает расширяться.

mathcad_25_10

Пульсация потока уменьшается расширением и сжатием эластичных стенок артерий.

mathcad_25_11

Перепады давления возле легких низки: примем, что избыточное давление в точках A и B равно нулю. Центральным элементом являются артерии, изменение объема которых определяются разницей входного и выходного потоков:

mathcad_25_12

Предположим, что объем сердца изменяется во времени по синусоидальному закону, но кровь выпускается только в течение положительной полуволны:

mathcad_25_13

График для восьми ударов:

mathcad_25_14

Средний поток – это интеграл объема в течение одного удара, деленный на время удара:

mathcad_25_15

Расширение артерий зависит от эластичности стенок и их геометрии, но мы не будем анализировать это здесь. Предположим, что объем линейно зависит от избытка давления:

mathcad_25_16

Чем эластичнее стенки, тем больше значение k. Определим три значения:

mathcad_25_17

Сопротивление тела:

mathcad_25_18

Разность давлений следует из:

mathcad_25_19

Баланс объемов артерий:

mathcad_25_20

Из

mathcad_25_21

получаем дифференциальное уравнение для давления:

mathcad_25_22

Решим его таким же образом, как и предыдущее, с той разницей, что k передадим в блок решения как параметр:

mathcad_25_23

Выведем решения:

mathcad_25_24

Максимумы давления зависят от эластичности артерий – чем больше эластичность, тем меньше давление:

mathcad_25_25

Здесь мы использовали для примера одно дифференциальное уравнение первого порядка, но Mathcad этим не ограничивается.

Резюме

  1. Обыкновенное дифференциальное уравнение содержит два вида переменных: зависимые (y(x)) и независимые (x).

 

  1. Решение можно получить с помощью блока решения и функции odesolve().
  2. Используйте оператор дифференцирования или штрих в записи дифференциального уравнения. Штрих вводится с помощью [Ctrl+’].
  3. Введите необходимые граничные условия (они могут содержать запись производной через штрих).
  4. Функция odesolve() содержит зависимую переменную и независимую переменную.
  5. Зависимые переменные записываются как функции от независимых.
  6. В завершение присвойте выходной переменной функцию odesolve(). Выходная переменная не записывается как функция от независимой переменной.
  7. Однако, при использовании вывода нужно записывать его как функцию независимой переменной.