Procedimento com valores tabelados
>
CubSpline4PtsT:=proc(X::vector,fX::vector)
local h0,h1,h2,h3,M,A,b,sol,U,h,S1,S2,S3,spline;
h0:=X[2]-X[1]:
h1:=X[3]-X[2]:
h2:=X[4]-X[3]:
h:=max(h0,h1,h2);
M:=vector(4,0):
M[1]:=0;
M[4]:=0;
A:=matrix(2,2,0):
A[1,1]:=(h0+h1)/3:
A[1,2]:=h1/6:
A[2,1]:=h1/6:
A[2,2]:=(h1+h2)/3:
A:=evalm(A);
b:=vector(2,0):
b[1]:=(fX[3]-fX[2])/h1-(fX[2]-fX[1])/h0:
b[2]:=(fX[4]-fX[3])/h2-(fX[3]-fX[2])/h1:
b:=evalm(b);
sol:=vector(2,0):
U:=gausselim(A):
sol:=backsub(U,b):
M[2]:=sol[1];
M[3]:=sol[2];
S1:=(x-X[1])^3/(6*h)*M[2]+(fX[1]/h)*(X[2]-x)+(fX[2]/h-h/6*M[2])*(x-X[1]);
S2:=(X[3]-x)^3/(6*h)*M[2]+(x-X[2])^3/(6*h)*M[3]+(fX[2]/h-h/6*M[2])*(X[3]-x)+(fX[3]/h-h/6*M[3])*(x-X[2]);
S3:=(X[4]-x)^3/(6*h)*M[3]+(fX[3]/h-h/6*M[3])*(X[4]-x)+fX[4]/h*(x-X[3]);
S1:=simplify(S1);
S2:=simplify(S2);
S3:=simplify(S3);
spline:=piecewise(X[1]<=x and x<X[2],S1,X[2]<=x and x<X[3],S2,X[3]<x and x<=X[4],S3);
RETURN(spline);
end:
>
X:=vector(4,[0,1,2,3]);
fX:=vector(4,[0,1/2,2,3/2]);
CubSpline4PtsT(X,fX);
>
with(plots):
A:=pointplot({[X[1],fX[1]],[X[2],fX[2]],[X[3],fX[3]],[X[4],fX[4]]},axes=BOXED,symbol=circle):
p:=x->CubSpline4PtsT(X,fX):
B:=plot(p(x),x=X[1]..X[4],axes=BOXED,title="Exercício Mathews293 com spline cúbico",labels=[x,"f(x)"]):
display(A,B);
>
X:=vector(4,[-1,-1/3,1/3,1]);
fX:=vector(4,[1/26,9/34,9/34,1/26]);
CubSpline4PtsT(X,fX);
with(plots):
A:=pointplot({[X[1],fX[1]],[X[2],fX[2]],[X[3],fX[3]],[X[4],fX[4]]},axes=BOXED,symbol=circle):
p:=x->CubSpline4PtsT(X,fX):
B:=plot(p(x),x=X[1]..X[4],axes=BOXED,title="Exercício 4.14 com spline cúbico",labels=[x,"f(x)"]):
display(A,B);