Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Аппроксимация функции


Автор: rs5630 19.1.2015, 16:54
Дана функция y = x^2 + случайное значение от 0 до 0.3. Нужно построить среднюю кривую и среднеквадратичное отклонение. Желательно с помощью numpy. Нашел как построить среднее и СКО, но нужно, чтобы среднее было кривой как на графике ниже, а не прямой как у меня. Подскажите как изменить программу.

График: https://ru.wikipedia.org/wiki/%CC%E5%F2%EE%E4_%ED%E0%E8%EC%E5%ED%FC%F8%E8%F5_%EA%E2%E0%E4%F0%E0%F2%EE%E2#mediaviewer/File:Linear_least_squares(2).svg

Код

import numpy as np
import matplotlib.pyplot as plt
from math import *
x = np.linspace(0,3,20)
y = np.zeros(20)
a = np.random.normal(0,0.3,size=2E1)
for i in range(20):
    y[i] = x[i]**2 + a[i]
A = np.vstack([x, np.ones(len(x))]).T
m, c = np.linalg.lstsq(A, y)[0]
plt.plot(x, y, 'bo-', lw = 1, label=u'Function')
plt.plot(x, m*x + c, 'r', label='Average')
std = np.zeros(20)
for i in range(20):
    std[i] = (sqrt((y[i] - (m*x[i] + c))**2))
plt.errorbar(x, y, std, label=u'Std')
plt.legend(loc='best')
plt.title(u'Plots')
plt.xlabel('X')
plt.ylabel('Y')
plt.grid()
plt.show()

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)