def _natural_cubic_spline_basis_expansion(xpts,knots):
num_knots = len(knots)
num_pts = len(xpts)
outmat = np.zeros((num_pts,num_knots))
outmat[:,0]= np.ones(num_pts)
outmat[:,1] = xpts
def make_func_H(k):
def make_func_d(k):
def func_d(x):
denom = knots[-1] - knots[k-1]
numer = np.maximum(x-knots[k-1],np.zeros(len(x)))**3 - np.maximum(x-knots[-1],np.zeros(len(x)))**3
return numer/denom
return func_d
def func_H(x):
d_fun_k = make_func_d(k)
d_fun_Km1 = make_func_d(num_knots-1)
return d_fun_k(x) - d_fun_Km1(x)
return func_H
for i in range(1,num_knots-1):
curr_H_fun = make_func_H(i)
outmat[:,i+1] = curr_H_fun(xpts)
return outmat
评论列表
文章目录