三次样条插值代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2 三次样条插值程序 三次样条插值利用方案二(求解固支样条或压紧样条)

按照要求要起点和终点的一阶导数值已知, 可得关于01,,.....,n M M M 的严格对角占优势的三对角方程组

然后利用三对角法(追赶法)解此线性方程组。

(1)编写M 文件,并保存文件名scfit.m

% x,y 分别为n 个节点的横坐标和纵坐标值组成的向量

% dx0和dxn 分别为S 的导数在x0和xn 处的值,即m 0和m n

n=length(x)-1;

h=diff(x);

d=diff(y)./h;

a=h(2:n-1);

b=2*(h(1:n-1)+h(2:n));

c=h(2:n);

u=6*diff(d);

b(1)=b(1)-h(1)/2;

u(1)=u(1)-3*(d(1)-dx0);

b(n-1)=b(n-1)-h(n)/2;

u(n-1)=u(n-1)-3*(dxn-d(n));

%追赶法部分

for k=2:n-1

temp=a(k-1)/b(k-1);

b(k)=b(k)-temp*c(k-1);

u(k)=u(k)-temp*u(k-1);

end

m(n)=u(n-1)/b(n-1);

for k=n-2:-1:1

m(k+1)=(u(k)-c(k)*m(k+2))/b(k);

end

%求S K1,S K2,S K3,S K4

m(1)=3*(d(1)-dx0)/h(1)-m(2)/2;

m(n+1)=3*(dxn-d(n))/h(n)-m(n)/2;

for k=0:n-1

00

()S x m '=()n n S x m '=0011111111212212n n n n n n M d M d M d M d μλμλ----⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦

S(k+1,1)=(m(k+2)-m(k+1))/(6*h(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

P=mkpp(x,S);

ppval(P,x);

plot(x,y ,'-*')

(或fnplt(P))

(2)在Command window 内输入已知条件(课本数值试验一后例子,令x0和xn 处一阶导数为0)

>> x=[1 2 3 4 5 6 7 8 9 10];

>> y=[3.56 2.56 1.54 0.53 0.26 0.90 1.81 2.12 1.53 0.56];

>> dx0=0;dxn=0;

调用编写的M 文件

>> S=scfit(x,y ,dx0,dxn)

回车

计算结果:

S =

0.7390 -1.7390 0 3.5600

-0.2369 0.4780 -1.2610 2.5600

0.2387 -0.2328 -1.0159 1.5400

0.0120 0.4834 -0.7654 0.5300

-0.1167 0.5193 0.2373 0.2600

-0.1853 0.1693 0.9260 0.9000

-0.0122 -0.3865 0.7088 1.8100

-0.0658 -0.4232 -0.1010 2.1200

0.7953 -0.6205 -1.1447 1.5300

即插值结果为

.().()().,[,]

.().().().,[,]()........................

.().().().,[,]32232322073901173901013561202369204780212610225623079539062059114479153910x x x x x x x x s x x x x x ⎧---+-+∈⎪--+---+∈⎪=⎨

⎪⎪-----+∈⎩

第一个图是利用ppval(P,x);plot(x,y)显示的图形,图中*为数据点 第二个图是利用fnplt(P)显示的图形

相关文档
最新文档