Форум сайта python.su
Дана функция y = x^2 + случайное значение от 0 до 0.3. Нужно построить среднюю кривую и среднеквадратичное отклонение. Желательно с помощью numpy. Нашел как построить среднее и СКО, но нужно, чтобы среднее было кривой как на графике ниже, а не прямой как у меня. Подскажите как изменить программу.
График: Your text to link here…
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()
Отредактировано rs5630 (Янв. 19, 2015 23:30:59)
Офлайн
Я так понял, Вам нужно аппроксимировать график полиномом 2ого порядка.
Я прикрепил класс polynomial.
import polynomial 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] poly=polynomial.polynomial(x,y,2) #Последнее значение - степень полинома, то есть результат вида: k0*x^2+k1*x+k2 k2,k1,k0=poly.coefficients # Соответственно, коэффициенты.
Прикреплённый файлы: polynomial.py (2,1 KБ)
Офлайн