Скачать 216.82 Kb.
|
Решение дифференциальных уравнений Цель работы — изучить возможности пакета Mathcad для решения дифференциальных уравнений и систем дифференциальных уравнений Основные теоретические сведения 1. Пусть необходимо найти решение уравнения ![]() с начальным условием ![]() ![]() ![]() ![]() ![]() ![]() ![]() Такой метод решения обыкновенных дифференциальных уравнений называется методом Эйлера. Геометрически метод Эйлера означает, что на каждом шаге мы аппроксимируем решение (интегральную кривую) отрезком касательной, проведенной к графику решения в начале интервала. Точность метода невелика и имеет порядок h. Говорят, что метод Эйлера – метод первого порядка, то есть его точность растет линейно с уменьшением шага h. Существуют различные модификации метода Эйлера, позволяющие увеличить его точность. Все они основаны на том, что производную, вычисленную в начале интервала, заменяют на среднее значение производной на данном интервале. Среднее значение производной можно получить (конечно же только приближенно) различными способами. Можно, например, оценить значение производной в середине интервала ![]() ![]() Можно также оценить среднее значение производной на интервале ![]() ![]() Такие модификации метода Эйлера имеет уже точность второго порядка. Оценку значения производной можно улучшить, увеличивая число вспомогательных шагов. На практике наиболее распространенным методом решения обыкновенных дифференциальных уравнений является метод Рунге-Кутта четвертого порядка. Для оценки значения производной в этом методе используется четыре вспомогательных шага. Формулы метода Рунге-Кутта следующие ![]() ![]() ![]() ![]() ![]() ![]() Перечисленные методы можно применять и для решения систем дифференциальных уравнений. Поскольку многие дифференциальные уравнения высших порядков могут быть сведены заменой переменных к системе дифференциальных уравнений первого порядка, рассмотренные методы могут быть использованы и для решения дифференциальных уравнений порядка выше первого. Еще один тип задач, часто встречающихся на практике, – краевые задачи. Пусть имеется дифференциальное уравнение второго порядка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ^ Решим задачу Коши для дифференциального уравнения первого порядка ![]() Пусть правая часть уравнения равна ![]() Зададим границы изменения x: ![]() ![]() Зададим число точек и величину шага: ![]() ![]() Зададим начальные условия: ![]() ![]() Вычислим x и y по формулам Эйлера ![]() ![]() ![]() Представим результат графически и сравним его с аналитическим решением ![]() ![]() ![]() ![]() Точное аналитическое решение и решение, полученное численно, отличаются в точке x=1 на ![]() То есть относительная ошибка составляет ![]() ^ Для решения дифференциальных уравнений Mathcad имеет ряд встроенных функций, в частности, функцию rkfixed, реализующую метод Рунге–Кутты четвертого порядка с фиксированным шагом. Фактически эта функция предназначена для решения систем дифференциальных уравнений первого порядка. ![]() Функция rkfixed(y, x1, x2, npoints, D) возвращает матрицу. Первый столбец этой матрицы содержит точки, в которых получено решение, а остальные столбцы – решения и его первые ![]() Аргументы функции:
В качестве примера рассмотрим решение системы Вольтерры–Лотки. Эта система описывает динамику численности хищников и жертв на замкнутом ареале и является одной из базовых моделей экологии. ![]() Для решения систем дифференциальных уравнений используются функция rkfixed. Внимание! В этом примере установлено значение ORIGIN=1, то есть нумерация элементов массива начинается с 1, а не с 0, как это принято в Mathcad'е по умолчанию. Пусть в начальный момент времени число хищников ![]() ![]() Задаем вектор начальных значений ![]() параметры системы ![]() ![]() интервал времени и количество точек, в которых будет вычислено решение ![]() ![]() и вектор правых частей системы. (Поскольку исходная система не зависит явно от времени t, функция D так же не зависит от времени явно хотя и содержит его в числе своих аргументов.) ![]() Решаем систему с помощью встроенной функции ![]() ![]() Представим на графике результаты расчета – зависимость численности популяций от времени ![]() и зависимость числа жертв от числа хищников ![]() Можно использовать обозначения ![]() ![]() Поскольку дифференциальное уравнение порядка выше первого может быть преобразовано к системе дифференциальных уравнений первого порядка, функция rkfixed может быть использована и для решения дифференциальных уравнений ^ Решим еще раз задачу Коши для дифференциального уравнения первого порядка ![]() Зададим границы изменения x: ![]() ![]() Зададим число точек внутри интервала ![]() Зададим начальные условия ![]() Обратите внимание на обозначения! Поскольку мы решаем только одно дифференциальное уравнение первого порядка, а не систему дифференциальных уравнений, матрица y содержит только один элемент, однако запись y=1 была бы неправильной. Необходимо явно указывать на то, что величина y – матрица, то есть писать индекс. Определим теперь матрицу производных. Эта матрица тоже состоит только из одного элемента. Этот элемент с точностью до обозначений совпадает с правой частью исходного дифференциального уравнения: ![]() Решаем дифференциальное уравнение ![]() ![]() ![]() ![]() ![]() Точное аналитическое решение и решение, полученное численно отличаются в точке ![]() ![]() Относительная ошибка составляет ![]() ^ В качестве примера решим задачу о гармоническом осцилляторе, для которого известно аналитическое решение, и легко может быть оценена точность вычислений. Дифференциальное уравнение второго порядка ![]() преобразуем к системе из двух дифференциальных уравнений первого порядка ![]() Пусть декремент затухания ![]() Пусть циклическая частота ![]() Зададим начальные условия ![]() y0 соответствует начальной координате, а y1 – начальной скорости. Зададим теперь матрицу D. С учетом того, что искомая величина соответствует нулевому элементу массива y, ее первая производная – первому, а вторая – второму, имеем ![]() ![]() Представим результаты расчета на графике и сравним их с аналитическим решением ![]() ![]() ![]() ![]() Для контроля точности вычислений нарисуем фазовую траекторию (зависимость смещения от скорости). Для гармонического осциллятора фазовая траектория должна иметь вид эллипса. ![]() Примечание: Mathcad имеет еще две функции для решения задачи Коши. Это функции Rkadapt и Bulstoer. Эти функции имеют те же самые аргументы и возвращают решения в такой же форме, что и функция rkfixed. Первая из этих функций использует метод Рунге–Кутты с переменным шагом, что позволяет повысить точность вычислений и сократить их объем, если искомое решение имеет области, где ее значения меняются быстро, и области плавного изменения. Функция Rkadapt будет варьировать величину шага в зависимости от скорости изменения решения. Функция Bulstoer реализует иной численный метод – метод Булирша–Штёра. Ее следует применять, если известно, что решение является гладкой функцией. ^ Пусть требуется найти решение дифференциального уравнения ![]() ![]() ![]() При значениях параметров ![]() ![]() Для решения краевой задачи имеется встроенная функция sbval, реализующая метод стрельб и позволяющая свести краевую задачу к задаче Коши. Функция sbval имеет следующие параметры:
Наша задача сводится к системе двух дифференциальных уравнений первого порядка: ![]() Поэтому функция D имеет вид ![]() Задаем граничные условия: ![]() ![]() Задача Коши для дифференциального уравнения второго порядка содержит два начальных условия. Нам известно только одно. Начальное приближение для недостающего значения задаем в векторе v, который в нашем случае состоит только из одного элемента. Несмотря на это, индекс о должен быть обязательно указан, чтобы подчеркнуть векторный характер этой величины: ![]() На левой границе интервала нам известно значение ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Теперь, когда нам стало известно недостающее начальное условие в задаче Коши, можно воспользоваться, например, функцией rkfixed ![]() ![]() ![]() ![]() ![]() ^ Mathcad предлагает новый способ для решения обыкновенных дифференциальных уравнений, разрешенных относительно старшей производной. Для этих целей служит уже известный нам блок given совместно с функцией odesolve. Дифференциальное уравнение совместно с начальными или граничными условиями записывается в блоке given. Производные можно обозначать как штрихами (Ctrl+F7), так и с помощью знака производной ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Обратите внимание! У искомой функции явно указан аргумент, знак производной стоит перед скобкой. Функция odesolve имеет три аргумента. Первый аргумент – независимая переменная, вторая – граница интервала, на котором ищется решение, последний аргумент – шаг, с которым ищется решение. Последний аргумент может быть опущен. Следующий пример демонстрирует решение краевой задачи. Использован другой способ записи производных, используется odesolve функция с двумя аргументами. ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() | Спроектировать и реализовать объектно-ориентированный шаблон взаимодействия математической модели и численного метода интегрирования... | ![]() | Цели урока: Обобщить и систематизировать изученный материал и знания учащихся по теме: «Уравнения» |
![]() | Данный урок является уроком закрепления в теме «Решение тригонометрических уравнений» | ![]() | Разработан метод численного решения системы четырех дифференциальных уравнений характеристики, описывающих неустановившиеся течения... |
![]() | В ряде практических задач управления и оптимизации приходится решать системы линейных алгебраических уравнений (слу). В настоящей... | ![]() | Любая экономическая система – это сложная система с множеством входов, выходов и сложной структурой взаимосвязей показателей, характеризующих... |
![]() | «Системы уравнений». На эту тему отдельных часов в программе не выделено, она изучается в рамках тех занятий курса «Элементарная... | ![]() | Определение многочлена. Теорема Виета. Решение квадратных уравнений. Разложение трехчлена на множители. Выделение полного квадрата.... |
![]() | Образовательные – обеспечить повторение, обобщение и систематизацию мате риала темы и создать условия контроля (самоконтроля) усвоения... | ![]() | Систематизировать знания учащихся по теме "Теорема Виета" и "Квадратные уравнения" |