Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 19, 2015 15:24:32

rs5630
Зарегистрирован: 2014-11-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Аппроксимация функции

Дана функция 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 Янв. 20, 2015 01:51:16

Paranoia_Agent
Зарегистрирован: 2014-06-25
Сообщения: 75
Репутация: +  5  -
Профиль   Отправить e-mail  

Аппроксимация функции

Я так понял, Вам нужно аппроксимировать график полиномом 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 # Соответственно, коэффициенты.

Прикреплённый файлы:
attachment polynomial.py (2,1 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version