Uploaded by al.ko.02

икт9

advertisement
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра РАПС
ОТЧЕТ
по лабораторной работе №9
по дисциплине «Информатика»
ТЕМА: Решение дифференциальных уравнений
Студент гр. 0492
Кононов А.Т.
Преподаватель
Пожидаев А.К.
Санкт-Петербург
2020
Цель работ: Изучение возможностей, предоставляемых MatLab, для
численного решения обыкновенных дифференциальных уравнений
произвольного порядка и систем с начальными условиями, т. е. задачи Коши.
Эффективное решение дифференциальных уравнений невозможно без
понимания основных вопросов, связанных с численными методами. Для
решения дифференциальных уравнений предназначены встроенные функции
MatLab, в вычислительной математике их называют солверы. Пользователю
необходимо выбрать подходящий солвер, в зависимости от свойств решаемой
задачи, и произвести необходимые установки, обеспечивающие получение
приближенного решения с требуемыми свойствами, например с заданной
точностью, иначе можно получить неточный результат, или затратить
слишком много времени на решение.
9.1. Разберёмся, чем отличаются солверы, представленные в Matlab.
Функциями решения дифференциальных уравнений являются ode23(),
ode45() и другие, имеющие вид:
[t, x] = ode23('fun', t0, tf, x0)
[t, x] = ode45('fun', t0, tf, x0)
[t, x] = ode23('fun', t0.tf.x0, tol, trace)
[t, x] = ode45('fun', t0.tf.x0, tol, trace)
где: 'fun' – имя m-файла, в котором содержатся правые части системы
дифференциальных уравнений; t0 – начальное значение аргумента; tf –
конечное значение аргумента; х0 – вектор начальных условий; tol – задаваемая
точность решения дифференциальных уравнений; trace – выдача
промежуточных результатов.
Солвером ode45 стоит воспользоваться в первую очередь, так как он даёт
хорошие результаты. Если требуется решение с меньшей точностью, можно
использовать солвер ode23. Если же требуется обеспечить высокую точность
решения, необходимо использовать солвер ode 113. Для решения жёстких
систем подходит солвер ode15s или солвер ode23s.
9.2. Разберём пример решения задачи Коши для дифференциального
уравнения. Схема решения состоит из следующих этапов:
1.
Приведение
дифференциального
уравнения
к
системе
дифференциальных уравнений первого порядка.
2. Написание специальной файл - функции для системы уравнений.
3. Вызов подходящего солвера.
4. Визуализация результата.
Пусть существует уравнение, описывающее движение:
y′′ + 2·y′ + 10·y = sin t
Предположим, что координата в начальный момент времени равна 1, а
скорость 0. Тогда: y(0) = 1, y′(0) = 0. Теперь приведём задачу к системе
исходных уравнений. Для этого воспользуемся вспомогательными
функциями. В итоге:
у1 ′ = y2 ;
у1(0) = 0
у2′ = –2·y2 – 10·yl + sin t
у2(0)
1
После приведения уравнения к системе, необходимо написать файл-функцию
diffl:
Далее решим задачу, используя солвер ode45:
В результате выполнения программы на экран выводятся графики,
отражающие поведение координаты точки и ее скорости в зависимости от
времени. Из графика видно, что колебание происходит в установившемся
режиме, начиная с t=5.
9.3. Чтобы задать необходимую точность вычислений, стоит воспользоваться
функцией options совместно с odeset. Рассмотрим на примере. Для этого
решим систему дифференциальных уравнений:
у1′ = y2 ;
у2′ = –1/t2
на отрезке [а, 100] при начальных условиях у1(а) = ln а, у2(а) = 1/а, взяв а =
0.001. В итоге график показывает:
Уменьшим относительную погрешность. Для этого включим options
четвёртым аргументом в солвер. Выведем графики приближённых значений
для погрешностей 10–3, 10–4, 10–6. Только точность 10–6 обеспечивает
получение приближенного решения, график которого почти совпадает с
графиком точного решения:
Вывод: я изучил возможности программы Matlab для решения
дифференциальных уравнений произвольного порядка и систем с начальными
условиями.
Download