Mathcad

Решение системы дифференциальных уравнений в mathcad: 28. Тема 7. Решение дифференциальных уравнений и систем в MathCad. Краткие теоретические сведения

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

Метод Рунге-Кутта

Решим методом Рунге-Кутта исходную систему дифференциальных уравнений, записанную в виде:

для следующих начальных условий:

,

Присвоим начальному индексу массивов значение 1.

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

Сформируем вектор начальных условий:

Вызов функции rkfixed():

Результат работы функции – матрица Xrk (таблица) значений, первый столбец которой содержит значения времени, второй искомые значения x1(t), третий – x2(t).

Для построения графика функций предварительно зададим интервал изменения индекса:

Рис. 3.2. Сравнение численного решения методом Рунге-Кутта (штрихи) и аналитического (сплошные линии) решения системы дифференциальных уравнений

Метод Рунге-Куттас адаптивным шагом

Решим ту же систему дифференциальных уравнений методом Рунге-Кутта с адаптивным шагом.

Вектор правых частей уравнения и вектор начальных условий уже сформированы выше в примере решения системы дифференциальных уравнений методом Рунге-Кутта

Вызов функции rkadapt():

Результат работы функции – матрица Xrkа(таблица) значений, первый столбец которой содержит значения времени, второй искомые значения x1(t), третий – x2(t).

Для построения графика функций предварительно зададим интервал изменения индекса:

Рис. 3.

3. Сравнение численного решения методом Рунге-Кутта с адаптивным шагом (штрихи) и аналитического (сплошные линии) решения системы дифференциальных уравнений

Метод Булирша-Штера

Решим ту же систему дифференциальных уравнений методом Булирша-Штера. Вектор правых частей уравнения и вектор начальных условий уже сформированы выше в примере решения системы дифференциальных уравнений методом Рунге-Кутта

Вызов функции Bulstoer():

Результат работы функции – матрица Xrkb(таблица) значений, первый столбец которой содержит значения времени, второй искомые значения x1(t), третий – x2(t).

Для построения графика функций предварительно зададим интервал изменения индекса:

Рис. 3.4. Сравнение численного решения методом Булирша-Штера(штрихи) и аналитического (сплошные линии) решения системы дифференциальных уравнений

3.

Приведение дифференциальных уравнений высших порядков к нормальному виду

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

.

Введем замену:

x(t)=x1(t),

,

.

тогда

,

.

Приводим к нормальному виду:

,

.

В матричном виде система уравнений (44):

или

.

4. Приведение матричного уравнения к новым координатам

Решим полученное в предыдущем пункте уравнение с помощью MathCad. Задаем исходные данные:

Решение будем искать в виде:

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

– векторlи формируем матрицуL:

находим матрицу L, обратнуюT, а затем и матрицуТ:

Выполняем проверку:

находим значения матрицы и подынтегрального выражения:

Находим функции y(t)иx(t):

Строим график:

Рис. 3.5. Решение с помощью приведения системы дифференциальных уравнений к новым координатам

Контрольные вопросы

  1. Представьте дифференциальное уравнение третьего порядка, описывающее систему, в виде системы дифференциальных уравнений первого порядка в нормальном виде.

  2. Выведите общий вид аналитического решения дифференциального матричного уравнения.

  3. Перечислите функции Mathcadдля численного решения систем дифференциальных уравнений.

  4. Как решить дифференциальное уравнение четвертого порядка с помощью функций rkfixed,rkadapt,bulstoer?

  5. В чем отличия между функциями rkfixed,rkadapt,bulstoer?

  6. Как решить дифференциальное матричное уравнение третьего порядка с помощью диагонализации матриц?

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

Павел Демидов 10.12.2014 Уроки Mathcad 0

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

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

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

Метод Эйлера

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

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

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

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

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

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

Все вхождения зависимой переменной c в блоке решения записываются как функции независимой переменной, т.е. как

c(t). Есть только одно исключение – запись слева от команды odesolve().

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

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

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

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

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

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

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

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

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

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

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

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

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

Из

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

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

k передадим в блок решения как параметр:

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

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

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

Резюме

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

 

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

Выпускник МГТУ им. Н.Э. Баумана, технический специалист по продуктам PTC Mathcad и Solid Edge.

View all posts by Павел Демидов →

Как узнать свободный объем сборки в Autodesk Inventor

Как еще можно использовать блоки в AutoCAD

SCIRP Открытый доступ

Издательство научных исследований

Журналы от A до Z

Журналы по темам

  • Биомедицинские и биологические науки.
  • Бизнес и экономика
  • Химия и материаловедение.
  • Информатика. и общ.
  • Науки о Земле и окружающей среде.
  • Машиностроение
  • Медицина и здравоохранение
  • Физика и математика
  • Социальные науки. и гуманитарные науки

Журналы по тематике  

  • Биомедицина и науки о жизни
  • Бизнес и экономика
  • Химия и материаловедение
  • Информатика и связь
  • Науки о Земле и окружающей среде
  • Машиностроение
  • Медицина и здравоохранение
  • Физика и математика
  • Социальные и гуманитарные науки

Публикация у нас

  • Представление статьи
  • Информация для авторов
  • Ресурсы для экспертной оценки
  • Открытые специальные выпуски
  • Заявление об открытом доступе
  • Часто задаваемые вопросы

Публикуйте у нас  

  • Представление статьи
  • Информация для авторов
  • Ресурсы для экспертной оценки
  • Открытые специальные выпуски
  • Заявление об открытом доступе
  • Часто задаваемые вопросы

Подпишитесь на SCIRP

Свяжитесь с нами

клиент@scirp. org
+86 18163351462 (WhatsApp)
1655362766
Публикация бумаги WeChat
Недавно опубликованные статьи
Недавно опубликованные статьи

Подпишитесь на SCIRP

Свяжитесь с нами

клиент@scirp. org
+86 18163351462 (WhatsApp)
1655362766
Публикация бумаги WeChat

Бесплатные информационные бюллетени SCIRP

Copyright © 2006-2023 Scientific Research Publishing Inc. Все права защищены.

Вершина

Почему я использую Mathcad — Debtwatch Стива Кина

  • Твит
  • Твит

Новый участник блога спросил: «Почему вы используете Mathcad?» в ответ на мой последний пост об использовании части средств, пожертвованных посетителями блога, для финансирования моего исследования.

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

Строю динамические модели экономики, используя системы обыкновенных дифференциальных уравнений. В наши дни существует множество программ, поддерживающих это, от общедоступных программ, таких как Scilab, до коммерческих гигантов, таких как Mathematica и Mathcad. Я пробовал большинство из них и остановился на Mathcad по двум причинам:

Его интерфейс очень естественен; и

Его сообщения об ошибках легко интерпретировать.

Я попытаюсь проиллюстрировать это моделированием одной и той же системы как в Mathcad, так и в Mathematica. Во-первых, вот успешный вывод из Mathematica моей простейшей модели эндогенных денег с ростом и кредитным кризисом:

А вот та же модель в Mathcad:

Хотя с графиками Mathematica можно сделать гораздо больше, я найдите дисплей Mathcad более интуитивным — больше похожим на то, что математик написал бы на листе бумаги, что и является философией дизайна Mathcad.

Но основное отличие заключается в следующей особенности: сообщения об ошибках, которые две программы генерируют, когда, как это часто бывает, вы допускаете ошибку в своих ранних попытках смоделировать модель. В этом случае я набрал «ss» вместо того, чтобы ввести «s» в конкретной функции. Вот реакция Mathematica на это:

А? Что означает «NDSolve::ndinnt: Начальное условие 400. ss не является числом или прямоугольным массивом чисел»? Это тривиальный пример, и, конечно, я уже знаю, но когда вы создаете сложную модель и допускаете случайную ошибку, найти ошибку может оказаться нетривиальным упражнением, даже если она на самом деле такая тривиальная, как эта. .

Вот такая же ошибка в Mathcad, и первая стадия ее реакции:

Ахах! У меня есть (пока не идентифицированная) неопределенная переменная! Я нажимаю на «отследить ошибку», и получаю следующее окно. Если бы был каскад ошибок, кнопка «Предыдущий» была бы выделена, но поскольку она только одна, когда я закрываю это окно, Mathcad помещает курсор прямо на вызывающую ошибку переменную «ss».

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

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