20Build the methods required for creating the basis functions of our piecewise model.
48 return (t -
p(i)) / (
p(i + 1) -
p(i))
54 from sympy
import Symbol, diff, lambdify
56 raise ImportError(
"Cannot import sympy")
66 thisrowderivs = [
u(t, i) ** m
for m
in range(2 * s)]
71 for j, elem
in enumerate(thisrowderivs):
72 thisrowderivs[j] = diff(elem, t, 1)
77 for elem
in thisrowderivs:
78 thiselem = lambdify(t, elem,
"numpy")
80 thisrows.append(thiselem(ps))
81 thisrowe.append(thiselem(pe))
83 matrixupper.append(thisrows)
84 matrixlower.append(thisrowe)
86 return np.array(matrixupper + matrixlower)
95 invlist.append(elem**-pwr)
113 dwmat = np.matmul(dmat, wmat)
116 dmat = np.identity(len(wmat))
120 coeffs = np.transpose(np.linalg.solve(dwmat, dmat))
121 except np.linalg.LinAlgError
as error:
124 "Error in calculating basis functions. Using Python LSTSQ method instead"
126 coeffs = np.linalg.lstsq(dwmat, dmat)[0]
129 clist = coeffs[s : 2 * s]
131 return np.array([blist, clist])
139 return np.array(coeffs)
148 if t <
p(i)
or p(i + 1) < t:
151 thesecoeffs = coeffs[i][borc][s]
153 for m, coeff
in enumerate(thesecoeffs):
154 val += coeff *
u(t, i) ** m
def listpseudoinv(lst, pwr=1)
def basisfunctionvalue(t, i, borc, s, coeffs)
def basiscoeffs(i, s, conditioning=True)