返回目录

Splineinterpl.m

text/plain
1.03 KB
2025-10-22 16:16:00

文件预览

function [M_Vdmon,M_cft,Splvalue,Svx]=Splineinterpl(vec_x,vec_y,y01,yn1,x)
% 三次样条函数的多项式计算方法,默认问题1
k=3;
n=length(vec_x);p=length(x);
A=zeros(n+2,k+1);H=zeros(n+2,n-2);Bp=zeros(p,n+k-1);

    j=0:k;
    A(1:n,:)=vec_x'.^j;
    A(n+1,:)=j.*vec_x(1).^(j-1);%一阶求导前半部,左边界点取值
    A(n+2,:)=j.*vec_x(n).^(j-1);%一阶求导前半部,右边界点取值

for i=3:n
    H(i,1:i-2)=(vec_x(i)-vec_x(2:i-1)).^k;
end

    H(n+1,:)=0;
    H(n+2,:)=k*(vec_x(n)-vec_x(2:n-1)).^(k-1);%一阶求导后半部,右边界点取值
    M_Vdmon=[A,H];
    yb=[vec_y,y01,yn1];
    M_cft=M_Vdmon\yb';%拟合系数M_cft=[a0,a1,...c1,c2...cn-1]

for s=1:p
     b=x(s)-vec_x(2:n);
     [b2,~]=findplus(b);
     B=x(s).^j;
     Bp(s,:)=[B,b2.^k];
end

Splvalue=Bp*M_cft;%三次样条逼近值

digits(5);

syms t

bt=t-vec_x;

Bt=t.^j;
Btm=Bt*M_cft(1:k+1);

Svx(1,2)=vpa(Btm);Svx(1,1)=1;st=0;
for r=2:n-1
    st=st+bt(r)^k*M_cft(k+r);
    Svx(r,2)=vpa(st+Btm);Svx(r,1)=r;
end