This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
courses:computational_mathematics:prac4 [2022/05/22 12:31] andrey.suchkov removed |
courses:computational_mathematics:prac4 [2022/05/22 12:35] andrey.suchkov |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Практическая работа №4: Численное дифференцирование ====== | + | ====== Практическая работа №4: Аппроксимация функций ====== |
===== Цель работы ===== | ===== Цель работы ===== | ||
- | Проверить правильность порядка точности и определить наивысшую достижимую точность (наименьшую погрешность) в стандартном режиме вычислений с плавающей точкой (8-байтовые числа, типа double) для пяти разностных формул численного дифференцирования. | + | Сформировать навыки и умения решения задачи аппроксимации функции с помощью метода наименьших квадратов (МНК) и дискретного преобразования Фурье (ДПФ); освоить реализацию МНК и ДПФ с помощью математического пакета GNU Octave. |
===== Постановка задачи ===== | ===== Постановка задачи ===== | ||
- | Сравнить точные значения $ f'(x_0) $, $ f''(x_0) $ с конечноразностными первыми производными 1-го, 2-го и 4-го порядков точности и конечноразностными вторыми производными 2-го и 4-го порядков точности, вычисляемыми по последовательно уменьшающимися вдвое значениям шага, если $ f(x) = \cfrac A{x^2 + px + q} $, $ x_0 = a $. Значения $ a $, $ A $, $ p $, $ q $ берутся из п/р №2. | + | Построить набор случайных данных для функции $ f(x) $ на промежутке $ [0, b] $ разбив его на $ n $ участков при параметре зашумления $ fluc $. Аппроксимировать полученные данные с помощью МНК по трём моделям: полиномиальной, экспоненциальной и ДПФ. |
===== Порядок выполнения работы ===== | ===== Порядок выполнения работы ===== | ||
- | - Реализовать функции для вычисления точных значений $ f(x) $, $ f'(x) $, $ f''(x) $. | + | - Реализовать функцию ''f(x)'' для вычисления значений функции $ f(x) $. |
- | - Реализовать функции для вычисления приближённых формул $ f'(x) $ 1-го, 2-го и 4-го порядка точности, а также $ f''(x) $ 2-го и 4-го порядка точности. | + | - Реализовать функцию ''mnk()'' для построения модели с помощью МНК. |
- | - Вычислить точные значения производных с точностью до 15-ти знаков после запятой. | + | - Разбить отрезок $ [0, b] $ на $ n $ участков и вычислить значения функции $ f(x) $ для каждого $ x $. |
- | - Посчитать погрешности (разности между точными значениями соответствующей производной и полученными по каждой из пяти разностных формул) при последовательных уменьшениях шага в два раза. | + | - Аппроксимировать полученные данные с помощью функции ''mnk()'' по двум моделям: полиномиальной и экспоненциальной. Построить графики аппроксимационных функций вместе с облаком значений. Вычислить среднеквадратические отклонения для каждой модели. Сделать выводы. |
- | - Результаты для каждой формулы вывести в виде таблицы. Таблица должна состоять из трёх колонок: номер шага, сам шаг и величина погрешности. | + | - Построить набор случайных данных с параметром зашумления $ fluc $. Рекомендуется использовать следующую функцию (здесь ''stud_num'' -- номер студенческого билета, e.g.: ''stud_num = 130301''): <code octave> |
- | - Построить график зависимости погрешности от шага для каждой формулы. Для удобства график лучше выводить в двойном логарифмическом масштабе. | + | rand ("state", stud_num) |
- | - Ориентируясь по графику и таблице для каждой формулы указать наивысшую достижимую точность (наименьшую погрешность) и номер шага (не сам шаг!), на котором эта погрешность была достигнута. | + | x = 0:b/n:b; |
- | - Сделать выводы. | + | y = f (x) + (2 * rand (1, n) - 1) * fluc; |
+ | </code> | ||
+ | - Аппроксимировать полученные данные с помощью функции ''mnk()'' по трём моделям: полиномиальной, экспоненциальной и ДПФ. Построить графики аппроксимационных функций вместе с облаком значений. Вычислить среднеквадратические отклонения для каждой модели. Сделать выводы. | ||
+ | - Изменить коэффициент при $ x $ так, чтобы функция $ f(x) $ стала периодической, т.е. $ f(0) = f(b) $. Реализовать периодическую функцию ''f_T(x)''. | ||
+ | - Построить набор случайных данных по подвергнутой периодизации функции $ f_T(x) $. | ||
+ | - Аппроксимировать полученные данные с помощью функции ''mnk()'' с помощью ДПФ. Построить графики аппроксимационных функций вместе с облаком значений. Вычислить среднеквадратические отклонения для каждой модели. Сравнить результаты аппроксимации с непериодической функцией $ f(x) $, сделать выводы. | ||
+ | |||
+ | ===== Варианты заданий ===== | ||
+ | <note important> | ||
+ | Выполнение работ осуществляется по индивидуальным вариантам заданий (функции и параметры). Номер варианта для каждого студента определяется преподавателем. | ||
+ | </note> | ||
+ | [[.task5:task5_vars]] |