Gegeven is een reeks van N+1 waarden xi met bijhorende functiewaarden yi (0iN). De x-punten zijn equidistant, zodat xi+1xi=h>0.

We wensen een functie te fitten aan deze punten, en daartoe stellen we in elk interval [xi,xi+1] een kubische veelterm voor, namelijk:

Pi(x)=yi+bi(xxi)+ci(xxi)2+di(xxi)3,met 0i<N

De functie f(x) is dus per interval gedefinieerd als een veeltermfunctie. Over het volledige interval [x0,xN] is de functie f(x) dus een aaneenschakeling van veeltermen.

De coëfficiënten bi, ci en di zijn te zoeken grootheden. Om deze vast te leggen, worden een reeks voorwaarden opgelegd om de functie f(x) continu en voldoende glad te maken, wat aanleiding geeft tot onderstaand stelsel in de onbekenden bi,ci,di (0i<N)

{hbi1+h2ci1+h3di1=yiyi1bi1bi+2hci1+3h2di1=0ci1ci+3hdi1=0hbN1+h2cN1+h3dN1=yNyN1c0=0cN1+3hdN1=0

waarbij de eerste 3 vergelijkingen gelden voor 1i<N.

Schrijf de functie spline3() met als argumenten de 1D NumPy- rijen x en y, elk bestaande uit N+1 reële getallen. Het resultaat van de functie is de 1D NumPy-rij, met 3N componenten, die de oplossing van bovenstaand stelsel bevat, namelijk [b0, c0, d0, b1, c2, d1, ...]. Het is hierbij de bedoeling dit stelsel volledig te construeren en vervolgens op te lossen. Gebruik zo veel mogelijk de geziene ingebouwde NumPy-functionaliteit.

Voorbeeld

x = np.array([-7.0, -6.0, -5.0, -4.0, -3.0, -2.0])
y = np.array([5.089685242514852, 2.4208420859231627, 10.82540893401563, 6.503962993840951, 2.1015572909559777, 9.552280583187677])
s = spline3(x, y)
print(s)
#[ -6.49096844   0.           3.82212528   4.97540741  11.46637585
#  -8.03721641   3.79650988 -12.64527338   4.52731756  -7.9120842
#   0.93667929   2.57299921   1.68027201   8.65567692  -2.88522564]