clear,clc % 清空命令行窗口和工作区变量 X=-1:0.2:1; % 定义X向量 Y=1./(25X.^2+1); % 定义Y向量 dx0= 0.0739644970414201; % 定义左端点一阶导数 dxn=-0.0739644970414201; % 定义右端点一阶导数 S=csfit(X,Y,dx0,dxn); % 调用csfit函数拟合样条曲线 x1=-1:0.01:-0.5;y1=polyval(S(1,:),x1-X(1)); % 计算第一段样条曲线的x和y值 x2=-0.5:0.01:0;y2=polyval(S(2,:),x2-X(2)); % 计算第二段样条曲线的x和y值 x3=0:0.01:0.5; y3=polyval(S(3,:),x3-X(3)); % 计算第三段样条曲线的x和y值 x4=0.5:0.01:1;y4=polyval(S(4,:),x4-X(4)); % 计算第四段样条曲线的x和y值 plot(x1,y1,x2,y2,x3,y3,x4, y4, X,Y,'.') % 绘制样条曲线和原始数据点 function S=csfit (X,Y,dx0,dxn) % 定义样条拟合函数 N=length (X)-1; % 计算样本点个数 H=diff(X); % 计算相邻样本点之间的距离 D=diff (Y)./H; % 计算相邻样本点的斜率 A=H(2:N-1); % 定义矩阵A B=2(H(1:N-1)+H(2:N)); % 定义矩阵B C=H(2:N); % 定义矩阵C U=6diff(D); % 定义矩阵U B (1)=B(1)-H(1)/2; % 调整B矩阵第一个元素 U(1)=U(1)-3(D(1)); % 调整U矩阵第一个元素 B(N-1)=B(N-1)-H(N)/2; % 调整B矩阵最后一个元素 U(N-1)=U(N-1)-3*(-D (N)); % 调整U矩阵最后一个元素 for k=2:N-1 % 循环计算A、B、U矩阵 temp=A (k-1)/B(k-1); B(k)=B(k)-tempC(k-1); U(k)=U(k)-tempU(k-1); end M(N)=U(N-1)/B(N-1); % 计算M矩阵最后一个元素 for k=N-2:-1:1 % 循环计算M矩阵 M(k+1)=(U(k)-C(k)M(k+2))/B(k); end M(1) =3(D (1)-dx0)/H(1)-M(2)/2; % 计算M矩阵的第一个元素 M(N+1)=3* (dxn-D(N))/H(N)-M(N)/2; % 计算M矩阵的最后一个元素 for k=0:N-1 % 循环计算S矩阵 S(k+1,1)=(M(k+2)-M(k+1))/(6H(k+1)); S(k+1,2)=M(k+1)/2; S(k+1,3)=D(k+1)-H(k+1)(2*M(k+1)+M(k+2))/6; S(k+1,4)=Y(k+1); end end % 结束函数定

clearclcX=-1021;Y=125X^2+1;dx0= 00739644970414201;dxn=-00739644970414201;S=csfitXYdx0dxn;x1=-1001-05;y1=polyvalS1x1-X1;x2=-050010;y2=polyvalS2x2-X2;x3=000105; y3=polyvalS3x3-X3;x4=050011;y4=polyvalS4x

原文地址: https://www.cveoy.top/t/topic/fd6o 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录