Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

теория 1к 2с / Приближение функций. Методы интерполяции зависимостей с одной независимой переменной. Интерполяционный многочлен Лагранжа. Аппроксимация методом наименьших квадратов

.pdf
Скачиваний:
13
Добавлен:
20.06.2023
Размер:
766.12 Кб
Скачать

Аппроксимация

Аппроксимация - научный метод, состоящий в замене одних объектов другими, в каком-то смысле близкими к исходным, но более простыми.

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

Суть аппроксимации

Основу методов аппроксимации составляет процесс минимизации отклонения между расчетными и экспериментальными значениями - называемом критерием рассогласования.

Суть аппроксимации

Наиболее часто в качестве критерия рассогласования выступает следующее уравнение:

где - экспериментальные значения; - расчетные значения.

Метод наименьших квадратов

Целевая функция: Критерий:

Метод наименьших квадратов

Необходимое условие - равенство нулю частных

производных по параметрам

Метод наименьших квадратов

Приводя ситему к матричной форме получаем:

Метод наименьших квадратов

Решение СЛАУ в матричном виде:

где

МНК для линейного уравнения

 

 

Исходный код

Результат

 

 

 

 

1

# Задание целевой функции

 

 

 

2

f = lambda x: -2 + 3 * x

 

 

 

3

# Создание псевдо-экспериментальных данных

 

 

 

4

xs = np.linspace(0, 2, 1000)

 

 

 

5

ys = f(xs) + np.random.randn(xs.size) / 2

 

 

 

6

# Формирование матрицы Ф

 

 

 

7

P = np.stack((np.ones(xs.size), xs), axis=-1)

 

 

 

8

# Расчет коэффициентов уравнения по МНК

 

 

 

9

a = np.linalg.inv(P.T @ P) @ (P.T @ ys)

 

 

 

10

# Получение расчетных значений

 

 

 

11

yc = a[0] + a[1] * xs

 

 

 

12

 

 

 

 

13

plt.scatter(xs, ys, alpha=0.3)

 

 

 

14

plt.plot(xs, yc, c="r")

 

 

 

15

 

 

 

 

16

plt.show()

 

 

 

 

 

 

 

 

 

 

 

 

МНК для линейного уравнения

 

 

Исходный код

Результат

 

 

 

 

1

# Задание целевой функции

 

 

 

2

f = lambda x: -1 + 3*x - 2*x**2

 

 

 

3

# Создание псевдо-экспериментальных данных

 

 

 

4

xs = np.linspace(0, 2, 1000)

 

 

 

5

ys = f(xs) + np.random.randn(xs.size) / 4

 

 

 

6

# Формирование матрицы Ф

 

 

 

7

arrs = (np.ones(xs.size), xs, xs**2)

 

 

 

8

P = np.stack(arrs, axis=-1)

 

 

 

9

# Расчет коэффициентов уравнения по МНК

 

 

 

10

a = np.linalg.inv(P.T @ P) @ (P.T @ ys)

 

 

 

11

# Получение расчетных значений

 

 

 

12

yc = a[0] + a[1] * xs + a[2] * xs**2

 

 

 

13

 

 

 

 

14

plt.scatter(xs, ys, alpha=0.3)

 

 

 

15

plt.plot(xs, yc, c="r")

 

 

 

16

 

 

 

 

17

plt.show()

 

 

 

 

 

 

 

 

 

 

 

 

МНК с NumPy

 

 

Исходный код

Результат

 

 

 

 

1

# Задание целевой функции

 

 

 

2

f = lambda x: -1 + 3*x - 2*x**2

 

 

 

3

# Создание псевдо-экспериментальных данных

 

 

 

4

xs = np.linspace(0, 2, 1000)

 

 

 

5

ys = f(xs) + np.random.randn(xs.size) / 4

 

 

 

6

# Расчет коэффициентов

 

 

 

7

p = np.polyfit(x, y, deg=3)

 

 

 

8

# Получение расчетных значений

 

 

 

9

yc = np.polyval(p, xs)

 

 

 

10

 

 

 

 

11

plt.scatter(xs, ys, alpha=0.3)

 

 

 

12

plt.plot(xs, yc, c="r")

 

 

 

13

 

 

 

 

14

plt.show()