теория 1к 2с / Приближение функций. Методы интерполяции зависимостей с одной независимой переменной. Интерполяционный многочлен Лагранжа. Аппроксимация методом наименьших квадратов
.pdfМНК с 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() |
|
|
|
|
|
|
|
|
|
|
|
|
МНК с NumPy
Описание произвольной функцией
Исходный код |
Результат |
1 # Задание целевой функции
2 def eq(x, a, b, c):
3return a + b*np.log(1e-7 + x * c)
4 # Создание псевдо-экспериментальных данных
5 xs = np.linspace(0, 1, 1000)
6 err = np.random.randn(xs.size) / 40 7 ys = eq(xs, 1, -0.1, 0.01) + err
8 # Расчет коэффициентов
9 cs = curve_fit(eq, xs, ys)[0]
10 # Получение расчетных значений
11 yc = eq(xs, *cs)
12
13 plt.scatter(xs, ys, alpha=0.3)
14 plt.plot(xs, yc, c="r")
15
16 plt.show()
Спасибо за внимание
Список ресурсов
Интерполяция WiKi
Интерполяция SciPy
МНК WiKi
Аппроксимация SciPy