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. Однако, при использовании вывода нужно записывать его как функцию независимой переменной.
No comments yet.

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