Уведомления

Группа в Telegram: @pythonsu

#1 Май 26, 2013 16:44:12

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Интерполяция, аппроксимация

К тому же статья не достаточно чесна. Вот

http://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html

Обратите внимание на параметр w



Офлайн

#2 Май 26, 2013 20:14:42

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Интерполяция, аппроксимация

Привожу код. Можно допилить… Возможно добавить автоматический выбор параметра метода класса из атрибутов класса при вызове метода класса без одного или нескольких параметров.

import numpy as np
class Approximation:
    """Class for performance of approximation by a polynomial."""
    def __init__(self, x, y, deg):
        self.x, self.y, self.deg = x, y, deg
        self.coefficients = self.update_coefficients(x, y, deg)
        self.function = self.update_function(self.coefficients)
        self.deviation = self.find_square_deviation(x, y, self.coefficients)
    def __repr__(self):
        return ("Class Approximation copy:\n" +
                "Scale: %s\n" % str(self.x) +
                "Empirical frequency: %s\n" % str(self.y) +
                "Coefficients: %s\n" % str(self.coefficients) +
                "Root mean square deviation: %s\n" % str(self.deviation))
    def update_coefficients(self, x, y, deg):
        """Get polynomial coefficients."""
        coefficients = np.polyfit(x, y, deg)
        return coefficients
    def update_function(self, coefficients):
        """Get polynomial functions."""
        function = np.poly1d(coefficients)
        return function
    def find_square_deviation(self, x, y, coefficients):
        """Find root mean square deviation."""
        deviation = 0
        function = self.update_function(coefficients)
        for pos in xrange(len(x)):
            deviation += (y[pos] - function(x[pos])) ** 2
        return deviation**0.5
x_scale = np.array(xrange(20))
y_scale = np.array([i**2 + i*2 for i in xrange(20)])
polynom = Approximation(x_scale, y_scale, 3)
print "СКО: ", polynom.deviation
print "Коэффициенты многочлена: ", polynom.coefficients
print "Значение полинома в точке х = 5: ", polynom.function(5)
print polynom



Отредактировано 4kpt (Май 26, 2013 20:48:25)

Офлайн

#3 Май 26, 2013 20:53:30

Win95
От:
Зарегистрирован: 2011-11-04
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Интерполяция, аппроксимация

Спасибо 4kpt!
Буду разбирать код



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version