Скачиваний:
20
Добавлен:
30.09.2023
Размер:
194.56 Кб
Скачать

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

Цель работыприобрести опыт численного решения дифференциальных уравнений с использованием средств MatLab.

Продолжительность работы - 2 часа.

Оборудование – работа выполняется в компьютерном классе с использованием пакета MATLAB.

Порядок выполнения

  1. Знакомство со справочным материалом по математике

  2. Знакомство со справочным материалом по пакету MATLAB.

  3. Изучение примеров.

  4. Самостоятельное выполнение упражнений. При выполнении упражнений в случае сообщения системы об ошибке рекомендуется найти и исправить ошибку самостоятельно; однако, если после многократных попыток сделать это не удается, то можно и нужно проконсультироваться с преподавателем.

P.S. Отчитываться перед преподавателем о выполнении упражнений не нужно. Однако, следует учесть, что их выполнение – залог успешного написания контрольной работы по модулю, поскольку контрольная работа составлена из аналогов упражнений.

Справочный материал по математике

1. Что понимают под численным решением дифференциального уравнения.

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

Задачу приближенного решения задачи Коши будем понимать как задачу построения на заданном отрезке функции , которая «близка» к решению задачи Коши с заданной точностью в том смысле, что ( ).

Один из способов поиска приближенного решения задачи Коши – численное решение дифференциального уравнения.

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

Численные методы могут быть использованы только для задач, решение которых существует и единственно, т.е. если задача корректно поставлена. Однако условие корректности необходимо, но недостаточно для численного решения задач. Также важно, чтобы задача была хорошо обусловлена, т.е. малые шевеления начальных условий приводили к малым изменениям в решениях. Если это условие не выполнено, то считается, что задача плохо обусловлена (слабо устойчива), т.е. небольшие погрешности входных данных или метода могут сильно исказить это решение.

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

На практике наиболее востребован метод Рунге-Кутта, позволяющий строить схемы разного порядка точности. Их преимущества:

- имеют высокую точность (кроме схемы ломаных);

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

- все схемы Рунге-Кутта допускают расчет с переменным шагом сетки, что делает их гибкими при использовании в приложениях;

- для расчета достаточно знать только начальное значение, дальнейшие значения искомой функции получаются путем расчета по одним и тем же формулам.

Справочный материал по пакету matlab

1. Численное решение дифференциальных уравнений

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

В MATLAB имеется большая библиотека инструментов, которые могут использоваться для численного решения дифференциальных уравнений. Использование этих инструментов требует основательных знаний теории дифференциальных уравнений и численных методов. Мы лишь некоторыми из них, пригодными для поиска решений «непроблемных» уравнений первого порядка.

Далее будем использовать для независимой переменной обозначение , а для зависимой (чтобы не противоречить обозначениям в меню помощи help).

Разобьем поиск численного решения в три этапа.

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

, , .

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

, , .

Рассмотрим в качестве примера задачу: , , .

Создание пользовательской функции в файле функции:

function dydt = fxy( t,y )

dydt=(t^2-3*y)/sqrt(t);

end

Создание анонимной функции:

>> FXY=@(t,y)(t^2-3*y)/sqrt(t)

FXY =

@(t,y)(t^2-3*y)/sqrt(t)

3 этап. Выбор метода решения. В пакетеMATLAB существует несколько так называемых решателей обыкновенных дифференциальных уравнений (ОДУ).

Перечислим некоторые из них.

Имя решателя ОДУ

Описание

ode45

Для нежестких задач, одношаговый решатель. Лучше всего подходит в качестве первой попытки применения для большинства задач. Основан на явном методе Рунге-Кутта порядка 4-5

ode23

Для нежестких задач, одношаговый решатель. Основан на явном методе Рунге-Кутта порядка 2-3. Часто более быстрый, но менее точный чем ode45.

ode15s

Для жестких задач, многошаговый решатель. Используется, когда ode45 не работает. Использует метод переменного порядка.

Вообще решатели делятся на две группы в соответствии с их возможностями решать жесткие задачи и в соответствии с использованием одношаговых или многошаговых методов.

Жесткими называют задачи, у которых возможна потеря точности в процессе численного решения. Заранее по внешнему виду жесткое уравнение распознать не всегда удается , тем более что свойство жесткости может проявляться на одних промежутках решения и не проявляться на других. На практике обычно сначала пробуют решить задач с помощью простого явного метода, а если обнаруживается, что численное решение «идет вразнос» или программа работает слишком медленно (из-за чрезмерного измельчения шага), применяют более сложные методы.

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

4 этап. Непосредственное решение дифференциального уравнения.

Команда, которая используется для численного решения обыкновенного дифференциального уравнения первого порядка, имеет, независимо от решателя, следующий формат:

[t,y]=solve_name(fun, tspan, y0)

Обозначения:

solve_name – это имя решателя (например, ode45).

fun – это функция из второго этапа (в примерах, dydt и FXY). Если она была записана как пользовательская функция, вводится дескриптор функции. Если она записана как анонимная функция, вводится имя анонимной функции.

tspan – вектор, который определяет промежуток, на котором ищется решение. Может быть задан как [t0 t1].

y0 – значение функции на левом конце промежутка интегрирования ( , где ).

Приведем решение задачи: , , . Для наглядности решение визуализируем.

>> [t y]=ode45(@fxy,[1 4],2);

>> plot(t,y)

>> xlabel('t'),ylabel('y')

>> grid on

Если функция была записана как анонимная, то решение получается вводом команды

>> [t y]=ode45(FXY,[1 4],2)