样条差值一型二型matlab程序,第一型 三次样条插值matlab程序.doc

第一型 三次样条插值matlab程序

第一型三次样条插值问题求解

一:解题过程

根据书上关于三次样条的步骤,列出相关的矩阵。

编写追赶法的求解函数,求解矩阵

得到

根据求解结果得到分段函数,画图表示,并求解

利用MATLAB内置三次样条函数求解问题

二:结果以及结果对比

1. (因显示问题,把表格中的精度变小了)

自编程序所得的 中间值

MATLAB内置三次样条 中间值

2.样条图像

自编程序所得的图像

MATLAB内置三次样条 图像

可得,自编程序解得的结果与MATLAB解的结果完全一致。

三:程序通用性分析

程序对于输入点的顺序进行优化,自变量X不需要从小到大进行排序,随机输入以后,程序会自动排序。数据的输入不限点数,自变量之间的间隔也不限。输入数据相对比较自由。

四:程序使用演示、通用性演示

运行文件 yzy.m,即可得到中间值以及三次样条图像

(里面内置了需要输入的数据)

1.按书上数据输入

得到图像

2.颠倒书上数据输入

得到同样的图像

在原有数据上多输入三组数据

根据上面三张图,可以发现,数据量不同、数据顺序不同、数据自变量X间隔不同,都可以得出结果,可以说明程序具有很好的通用性。

附录

yzy.m

A=[10,1,2,3,4,5,6,7,8,9,0,11,13,15;5.8,3.3,4.04,4.7,5.22,5.54,5.78,5.4,5.57,5.7,2.51,6,8,10.3];

A=A'; %转置排序

A=sortrows(A);

nn=size(A,1);

A=A';

f1=0.8;f2=0.2;

n=size(A,2);

M=eye(n);

M=M*2;

N=zeros(n,1);

for i=2:n-1

M(i,i-1)=(A(1,i)-A(1,i-1))/(A(1,i+1)-A(1,i-1));

M(i,i+1)=1-M(i,i-1);

N(i)=6*(((A(2,i+1)-A(2,i))/(A(1,i+1)-A(1,i))-((A(2,i)-A(2,i-1)))/(A(1,i)-A(1,i-1)))/(A(1,i+1)-A(1,i-1)));

end

M(1,2)=1;

M(n,n-1)=1; %M为三次样条 的 矩阵

N(1)=6*(((A(2,2)-A(2,1))/(A(1,2)-A(1,1))-f1));

N(n)=6*(f2-((A(2,n)-A(2,n-1))/(A(1,n)-A(1,n-1))));

NE=zeros(n,n+1); %追赶法

NE(1,1)=M(1,1);

NE(1,n+1)=N(1);

for i=2:n

l=M(i,i-1)/NE(i-1,i-1);

NE(i,i)=M(i,i)-l*M(i-1,i);

NE(i,n+1)=N(i)-l*NE(i-1,n+1);

end

AN=zeros(n,1);

AN(n)=NE(n,n+1)/NE(n,n);

for i=1:n-1

j=n-i;

AN(j)=(NE(j,n+1)-M(j,j+1)*AN(j+1))/NE(j,j);

end

M=AN; %追赶法 结束

S=zeros(n-1,5);

for i=1:n-1;

S(i,1)=A(2,i);

S(i,2)=(A(2,i+1)-A(2,i))/(A(1,i+1)-A(1,i))-(1/3*M(i)+1/6*M(i+1))*(A(1,i+1)-A(1,i));

S(i,3)=1/2*M(i);

S(i,4)=(M(i+1)-M(i))/(6*(A(1,i+1)-A(1,i)));

S(i,5)=S(i,1)+S(i,2)*((A(1,i+1)-A(1,i))/2)+S(i,3)*((A(1,i+1)-A(1,i))/2).^2+S(i,4)*((A(1,i+1)-A(1,i))/2).^3; % 三次样条函数 系数

end

n=size(S,1);

title('三次样条图像');

hold on;

for i=1:n

x=A(1,i):(A(1,i+1)-A(1,i))/100:A(1,i+1);

y=S(i,1)+S(i,2)*(x-A(1,i))+S(i,3)*(x-A(1,i)).^2+S(i,4)*(x-A(1,i)).^3;

plot(x,y);

plot(A(1,i),A(2,i),'o');

end

plot(A(1,n+1),A(2,n+1),'o');

hold off;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值