三次样条插值---三弯矩法(Matlab实现)

目录

1、概述

2、代码

3、结果


1、概述

      在前面一章我们已经总结完知识点了,我们这篇文章直接用Matlab进行编程,下面直接上代码和运行结果。

2、代码

function Q=san(ssss,p) 
Q=zeros(2,1); 
x=[1;2;3;4;5;6;7;8;9;10]; 
y=[0;0.69314718;1.0986123;1.3862944;1.6094378;1.7917595;
1.9459101;2.079445;2.1972246;2.3025851]; 
h=zeros(10,1); 
d=zeros(10,1); 
u=zeros(10,1); 
v=zeros(10,1); 
r=zeros(10,1); 
l=zeros(10,1); 
z=zeros(10,1); 
m=zeros(10,1); 
for t=1:1:9; 
    h(t)=x(t+1)-x(t); 
end 
d(1)=6/h(1)*((y(2)-y(1))/h(1)-1); 
d(10)=6/h(9)*(0.1-(y(10)-y(9))/h(9)); 
for t=1:1:8 
	u(t+1)=h(t)/(h(t)+h(t+1)); 
v(t+1)=1-u(t+1); 
d(t+1)=6/(h(t)+h(t+1))*((y(t+2)-y(t+1))/(x(t+2)-x(t+1))-(y(t+1)-y (t))/(x(t+1)-x(t))); 
end 
u(10)=1;v(1)=1;r(1)=d(1); 
for t=2:1:10 
	l(t)=u(t)/r(t-1); 
	r(t)=d(t)-l(t)*v(t-1); 
end 
z(1)=d(1); 
for t=2:1:10 
	z(t)=d(t)-l(t)*z(t-1); 
end 
m(10)=z(10)/r(10); 
for t=9:-1:1 
	m(t)=(z(t)-v(t)*m(t+1))/r(t); 
end 
for t=1:1:10 
	if p>=t&&p<(t+1) 
		Q(:,1)=feval(ssss,p,t,x,m,h,y);break 
	end
end 
function Q=ssss(p,t,x,m,h,y) 
Q=zeros(2,1); 
Q(1,1)=((power((x(t+1)-p),3)*m(t)+power((p-x(t)),3)*m(t+1))/6+(y( t)-m(t)*h(t)*h(t)/6)*(x(t+1)-p)+(y(t+1)-m(t+1)*h(t)*h(t)/6)*(p-x( t)))/h(t);
Q(2,1)=(-(power((x(t+1)-p),2)*m(t)+power((p-x(t)),2)*m(t+1))/2+(y (t)-m(t)*h(t)*h(t)/6)+(y(t+1)-m(t+1)*h(t)*h(t)/6))/h(t); 
End

3、结果

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值