Module rpps.utils.interp
Functions
def lagrange(x, xp, yp)-
Expand source code
def lagrange(x, xp, yp): n = len(xp) # def get_basis(X, j): # b = [ # (X - xp[m]) / (xp[j] - xp[m]) # for m in range(n) if not m == j # ] # return np.prod(b, axis=0) * yp[j] # return np.sum([get_basis(x, j) for j in range(n)], axis=0) basis = np.zeros((len(x), len(x)), dtype=yp.dtype) for j in range(n): b = [] for m in range(n): if m == j: continue b.append((x - xp[m]) / (xp[j] - xp[m])) basis[j,:] = np.prod(b, axis=0) * yp[j] return np.sum(basis, axis=0) def linear(x, xp, yp)-
Expand source code
def linear(x, xp, yp): return np.interp(x, xp, yp) def spline(x, xp, yp)-
Expand source code
def spline(x, xp, yp): """ q(x) = (1-t(x))y1 + t(x)y2 + t(x)(1-t(x))((1- t(x))a+t(x)b) t(x) = (x-x1)/(x2-x1) a = k1(x2-x1)-(y2-y1) b = -k2(x2-x1)+y2-y1 [ [ a11 a12 0 ] [k0] = [b1] [ a21 a22 a23 ] [k1] = [b2] [ 0 a32 a33 ] [k2] = [b3] ] a11 = 2/(x1-x0) a12 = 1/(x1-x0) a21 = 1/(x1-x0) a22 = 2*( 1/(x1-x0) + 1/(x2-x1) ) a23 = 1/(x2-x1) a32 = 1/(x2-x1) a33 = 2/(x2-x1) b1 = 3*( (y1-y0)/(x1-x0)**2 ) b2 = 3*( (y1-y0)/(x1-x0)**2 + ( (y2-y1)/(x2-x1**2) ) ) b3 = 3*( (y2-y1)/(x2-x1)**2 ) """ xp = [-1, 0, 3] yp = [0.5, 0, 3] px = xp[0:3] py = yp[0:3] a11 = 2/(px[1]-px[0]) a12 = 1/(px[1]-px[0]) a21 = 1/(px[1]-px[0]) a22 = 2*(1/(px[1]-px[0]) + 1/(px[2]-px[1])) a23 = 1/(px[2]-px[1]) a32 = 2/(px[2]-px[1]) a33 = 2/(px[2]-px[1]) b1 = 3*( (py[1]-py[0])/(px[1]-px[0])**2 ) b2 = 3*( (py[1]-py[0])/(px[1]-px[0])**2 + (py[2]-py[1])/(px[2]-px[1])**2 ) b3 = 3*( (py[2]-py[1])/(px[2] - px[1])**2 ) a_mat = [ a11, a12, 0, a21, a22, a23, 0, a32, a33 ] b_mat = [b1, b2, b3] k0 = np.matmul(a_mat[0:3], b_mat) k1 = np.matmul(a_mat[3:6], b_mat) k2 = np.matmul(a_mat[6:9], b_mat) print(f"k0: {k0}") print(f"k1: {k1}") print(f"k2: {k2}")q(x) = (1-t(x))y1 + t(x)y2 + t(x)(1-t(x))((1- t(x))a+t(x)b) t(x) = (x-x1)/(x2-x1) a = k1(x2-x1)-(y2-y1) b = -k2(x2-x1)+y2-y1 [ [ a11 a12 0 ] [k0] = [b1] [ a21 a22 a23 ] [k1] = [b2] [ 0 a32 a33 ] [k2] = [b3] ] a11 = 2/(x1-x0) a12 = 1/(x1-x0) a21 = 1/(x1-x0) a22 = 2( 1/(x1-x0) + 1/(x2-x1) ) a23 = 1/(x2-x1) a32 = 1/(x2-x1) a33 = 2/(x2-x1) b1 = 3( (y1-y0)/(x1-x0)2 ) b2 = 3*( (y1-y0)/(x1-x0)2 + ( (y2-y1)/(x2-x12) ) ) b3 = 3*( (y2-y1)/(x2-x1)2 )