Hướng dẫn python extrapolate

You can also use numpy's polyfit:

data = np.array[[[1,5], [2,10], [3,15], [4,20], [5,25]]]
fit = np.polyfit[data[:,0], data[:,1] ,1] #The use of 1 signifies a linear fit.

fit
[  5.00000000e+00   1.58882186e-15]  #y = 5x + 0

line = np.poly1d[fit]
new_points = np.arange[5]+6

new_points
[ 6, 7, 8, 9, 10]

line[new_points]
[ 30.  35.  40.  45.  50.]

This allows you to alter the degree of the polynomial fit quite easily as the function polyfit take thes following arguments np.polyfit[x data, y data, degree]. Shown is a linear fit where the returned array looks like fit[0]*x^n + fit[1]*x^[n-1] + ... + fit[n-1]*x^0 for any degree n. The poly1d function allows you turn this array into a function that returns the value of the polynomial at any given value x.

In general extrapolation without a well understood model will have sporadic results at best.

Exponential curve fitting.

from scipy.optimize import curve_fit

def func[x, a, b, c]:
    return a * np.exp[-b * x] + c

x = np.linspace[0,4,5]
y = func[x, 2.5, 1.3, 0.5]
yn = y + 0.2*np.random.normal[size=len[x]]

fit ,cov = curve_fit[func, x, yn]
fit
[ 2.67217435  1.21470107  0.52942728]         #Variables

y
[ 3.          1.18132948  0.68568395  0.55060478  0.51379141]  #Original data

func[x,*fit]
[ 3.20160163  1.32252521  0.76481773  0.59929086  0.5501627 ]  #Fit to original + noise

Tôi đã nghĩ ra một giải pháp khá thanh lịch [IMHO], vì vậy tôi không thể cưỡng lại việc đăng nó:

from bisect import bisect_left

class Interpolate[object]:
    def __init__[self, x_list, y_list]:
        if any[y - x 

Chủ Đề