1. численные методы
Основы MATLAB
Юдинцев В. В.
19 сентября 2015 г.
Кафедра теоретической механики
Самарский государственный аэрокосмический университет
им. академика С. П. Королёва
(национальный исследовательский университет)
http://yudintsev.info
4. полиномиальная интерполяция
• Известны значения некоторой функции y(x) в точках
x0, x1, x2, . . . , xn:
y0, y1, y2, . . . , yn.
• Необходимо построить интерполирующий многочлен
Ln(x), совпадающий с значениями табличной функции в
точках x0, x1, x2, . . . , xn и приближающий функцию y(x) на
интервале [x0, xn].
Интерполирующий многочлен в форме Лагранжа:
Ln =
n∑
i=0
yi
(x − x0)(x − x1)...(x − xi−1)(x − xi+1)...(x − xn)
(xi − x0)(xi − x1)...(xi − xi−1)(xi − xi+1)...(xi − xn)
3
5. полиномиальная интерполяция: функция polyfit
Исходные данные
1 x = [ 0 . 1 0.2 0.3 0 . 4 ] ;
2 y = [ 0 . 2 0.6 0.5 0 . 3 ] ;
Вычисление коэффициентов интерполирующего
многочлена ˜y = pnxn + pn−1xn−1 + . . . + p0 для n = 3
3 p = p o l y f i t ( x , y , 3 )
4 ans =
5 66.6667 −65.0000 18.8333 −1.1000
Первый элемент – pn, последний – p0.
4
9. полиномиальная интерполяция
• Полиномиальная интерполяция используется локально.
• Для глобальной интерполяции используется
сплайн-интерполяция – глобальная
„кусочно-полиномиальная“ интерполяция.
8
10. построение графика
9 >> fp l ot (@( x ) polyval (p , x ) , [ 0 . 1 0 . 4 ] ) ;
10 >> grid on ;
11 >> xlabel ( ’ x ’ ) ; ylabel ( ’ y ’ ) ;
12 >> print ( ’−dpng ’ , ’−r600 ’ , ’ function . png ’ ) ;
9
11. сплайн-интерполяция
Для числа или вектора/матрицы xp: линейная
интерполяция
1 yp = interp1 ( x , y , xp )
поиск ближайшего табличного значения
1 yp = interp1 ( x , y , xp , ’ nearest ’ )
сплайн-интерполяция (полином 3 степени)
1 yp = interp1 ( x , y , xp , ’ spline ’ )
10
13. конечные разности
Задана таблица значений x0, x1, x2, . . . , xn:
1 >> x = [ 0 . 1 0.2 1 0.32 0 . 4 1 ] ;
Конечные разности 1-го порядка
∆xk = xk+1 − xk, k = 0, . . . , n − 1
1 >> dx = d i f f ( x )
2 ans =
3 0.110000 0.110000 0.090000
Конечная разности 2-го порядка
1 >> dx = d i f f ( x , 2 )
2 ans =
3 2.7756 e−17 −2.0000e−02
12
15. метод трапеций
1.0 1.5 2.0 2.5 3.0
-0.2
-0.1
0
0.1
0.2
0.3
0.4
x
Табличная функция:
1 >> x = [ 0 . 1 0. 21 0.32 0 . 4 1 ] ;
2 >> y = sin ( x ) +x ;
Вычисление интеграла:
1 >> trapz ( x , y )
2 ans =
3 0.1569
∫ b
a
y(x)dx ≈
1
2
n∑
i=1
(xn+1 − xn)(yn + yn+1)
14
16. метод симпсона
Интегрирование методом Симпсона
1 integral = quad ( @function , a , b , eps ) ;
a,b – пределы интегрирования
eps – точность (по умолчанию 10−6)
@function – ссылка на функцию или строка-выражение,
например, ’sin(x)+x’.
15
19. структура
• Приведение к системе дифференциальных уравнений
первого порядка.
• Файл-функция правой части f(t, q).
• Файл-скрипт запуска процесса интегрирвования ДУ.
18
23. дифференциальные уравнения движения
Приведение к системе дифференциальных уравнений
первого порядка.
m
d2x
dt2
= 0,
m
d2y
dt2
= −mg.
⇒
dx
dt
= Vx,
dVx
dt
= 0,
dy
dt
= Vy,
dVy
dt
= −g.
⇒
dq
dt
= f(q, t)
где
q = (x, Vx, y, Vy), f(q, t) = (Vx, 0, Vy, −g)
22
24. ode файл – файл-функция правых частей
Файл в котором вычисляется правая часть
дифференциального уравнения или системы уравнений:
q ⇒ ˙q = f(q, t) ⇒ ˙q
где x – вектор зависимых переменных, t – время.
Файл-функция dqdt.m
1 function dq = dqdt ( t , q)
2 g = 9 . 8 1 ;
3 m = 1 . 0 0 ;
4 x=q ( 1 ) ; Vx=q ( 2 ) ; y=q ( 3 ) ; Vy=q ( 4 ) ;
5 dq = [ Vx , 0 , Vy , −g ] ;
23
25. интегрирование
1 % Начальные условия
2 V0 = 1 0 ;
3 a = pi /4;
4 q0 = [0 , V0* cos ( a ) , 0 , V0* sin ( a ) ] ;
5 % Интервал интегрирования
6 tspan = [0 5 ] ;
7 [ t , q] = ode45 (@dqdt, tspan , q0 ) ;
24
26. методы интегрирования
Интегратор Описание
ode45 Метод Рунге-Кутты 4 и 5 порядков с автоматиче-
ским выбором шага
ode23 Метод Рунге-Кутты 2 и 3 порядков с автоматиче-
ским выбором шага
ode113 Многошаговый метод Адамса: метод с предска-
занием и коррекцией
ode15s Многошаговый метод для интегрирования жест-
ких систем
ode23s Одношаговый метод Розенброка второго поряд-
ка для жестких систем
25
29. управление процессом интегрирования
Расширенная версия запуска интегрирования д.у.:
1 [ t , q] = ode45 ( @dqdt, tspan , q0 , options ) ;
До запуска интегрирования заполняется специальная
структура options при помощи функции odeset:
1 options = odeset ( ’Парам . 1 ’ , Значение , ’Парам . 2 ’ , . . . ) ;
2 [ t , q] = ode45 ( @dqdt, tspan , q0 , options ) ;
28
30. точность решения
• ’RelTol’: относительная погрешность. Число - значение
погрешности для всех переменных, или вектор,
задающий погрешность для каждой переменной (по
умолчанию 10−3)
• ’AbsTol’: абсолютная погрешность. Число или вектор
(по умолчанию 10−6)
1 options = odeset ( ’ RelTol ’ ,1 e−4, ’ AbsTol ’ ,1 e−8) ;
2 [ t , q] = ode45 ( @dqdt, tspan , q0 , options ) ;
29
31. параметры интегрирования
• ’InitialStep’: начальный шаг интегрирования;
• ’Mass’: матрица коэффициентов M в
дифференциальных уравнениях, записанных в виде
M(q, t) ˙q = f(t, q).
Имя переменной, если матрица масс постоянная, или
ссылка на m-файл. Для всех интеграторов кроме
ode15s, ode23t матрица масс должна быть
невырожденная;
• ’MassSingular’: может ли матрица масс быть
вырожденной. Возможные значения: ’yes’, ’no’,
’maybe’ (по умолчанию ’maybe’).
30
32. события: параметр ’events’
Для остановки процесса интегрирования при выполении
некоторого условия используется функция событий,
которая передаётся интегратору:
1 options = odeset ( ’ Events ’ , @events ) ;
2 V0 = 1 ;
3 a = pi /4;
4 q01 = [0 , V0* cos ( a ) ,0 , V0* sin ( a ) ] ;
5 [ t1 , q1 ] = ode45 (@dqdt, [ 0 20] , q01 ) ;
31
33. пример файл-функции событий events.m
q = (x, Vx, y, Vy)T
1 function [ value , isterminal , direction ] = events ( t , q)
2 % Следим за изменением переменной y
3 value = q ( 3 ) ;
4 % Остановить процесс ,
5 isterminal = 1 ;
6 % если q ( 3 ) станет равна нулю и будет убывать
7 direction = −1;
Файл-функция для остановки процесса интегрирования
(isterminal=1) при пересечении нуля функцией y(t) (value =
q(3)) при её убывании (direction = -1).
32
34. падение шарика на упругую поверхность
1 options = odeset ( ’ Events ’ , @events ) ;
2 v0 = 1 ;
3 q01 = [0 , v0* cos ( pi /4) ,0 , v0* sin ( pi /4) ] ;
4 [ t1 , q1 ] = ode45 (@dqdt, [ 0 20] , q01 ) ;
5 n1 = length ( t1 ) ;
Перед интегрированием второго этапа меняем знак
скорости Vy (шарик отскочил с в два раза меньшей
скоростью):
6 q02 = q1 ( n1 , : ) ;
7 q02 ( 4 ) = −q02 ( 4 ) * 0 . 5 ;
33
35. падение шарика на упругую поверхность
Интегрируем от t1k до t1k + 20
8 t0 = t1 ( n1 ) ; tk =t0 +20;
9 [ t2 , q2 ] = ode45 (@dqdt , [ t0 tk ] , q02 ) ;
“Склеиваем” результаты двух этапов движения:
10 t =[ t1 ; t2 ] ; q=[ q1 ; q2 ] ;
34
36. падение шарика на упругую поверхность
Построение траектории движения шарика:
11 plot (q ( : , 1 ) ,q ( : , 3 ) ) ;
35
37. Vadim Yudintsev
Computational Mechanics with MATLAB
Lecture 3: Numerical methods
LaTeX Beamer theme METROPOLIS
by Matthias Vogelgesang
https://github.com/matze/mtheme
36