(精品)数值分析课程设计-三次样条插值

合集下载

数值分析实验报告-插值、三次样条

数值分析实验报告-插值、三次样条

实验报告:牛顿差值多项式&三次样条问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数21()25f x x作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。

实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。

应用所编程序解决实际算例。

实验要求:1. 认真分析问题,深刻理解相关理论知识并能熟练应用;2. 编写相关程序并进行实验;3. 调试程序,得到最终结果;4. 分析解释实验结果;5. 按照要求完成实验报告。

实验原理:详见《数值分析 第5版》第二章相关内容。

实验内容:(1)牛顿插值多项式1.1 当n=10时:在Matlab 下编写代码完成计算和画图。

结果如下:代码:clear allclcx1=-1:0.2:1;y1=1./(1+25.*x1.^2);n=length(x1);f=y1(:);for j=2:nfor i=n:-1:jf(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1));endendsyms F x p ;F(1)=1;p(1)=y1(1);for i=2:nF(i)=F(i-1)*(x-x1(i-1));p(i)=f(i)*F(i);endsyms PP=sum(p);P10=vpa(expand(P),5);x0=-1:0.001:1;y0=subs(P,x,x0);y2=subs(1/(1+25*x^2),x,x0);plot(x0,y0,x0,y2)grid onxlabel('x')ylabel('y')P10即我们所求的牛顿插值多项式,其结果为:P10(x)=-220.94*x^10+494.91*x^8-9.5065e-14*x^7-381.43*x^6-8.504e-14*x^5+123.36*x^4+2.0202e-1 4*x^3-16.855*x^2-6.6594e-16*x+1.0并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。

计算方法三次样条插值课程设计

计算方法三次样条插值课程设计

摘要本文细致的讲解了三次样条插值函数的产生及在实际中解决的问题,通过MATLAB的程序编写,可以将复杂的计算省去,直接的给出了三次样条插值的结果与实际结果间的误差,验证实际结果和理论值的一致性。

避免了求解方程中的不必要计算,使求解效率得到显著的提高。

关键词插值函数三次样条插值 MATLAB1 三次样条插值函数概论当插值节点很多时,插值多项式的次数就会很高,这不仅增大了计算量,还会影响结果的精确度.虽然可以采用上述分段插值,但是主要缺点就是个分段接头处不光滑,插值函数的导数不连续,因此想构造这样的插值:既能分段的低次插值,又能保证接头处的光滑,就产生了三次样条插值函数.1.1定义设函数()f x 市区间[a,b]上的二次连续可微函数,在区间[a,b]上给处一个划分。

设函数()f x 是区间[a,b]上的一个划分011...n n a x x x x b -∆=<<<<=如果函数()S x 满足条件(1)在每个小区间1[,]k k x x +(k=1,2,….,n )上()S x 是一个部超过m 次的多项式。

(2)在节点k x (k=1,2,….,n )处具有m-1阶的连续导数。

(3)()()(0,1,2,...)j j s x f x j n ==1.2三次样条差值函数的构造由于三次样条插值我、函数s(x)的插值节点处的二阶导数存在,因此令各节点处的二阶导数为'()(0,1,...,)k s x m k n == (1.01)根据样条插值函数的定义,三次样条插值函数是s(x)在每一个小区间)1....,1,0](,[]1-=+n k x x k k 上市不超过三次的多项式。

在每一个小区间)1....,1,0](,[]1-=+n k x x k k 上,其二阶导数为线性函数,即''1111()k kk k k k k kx x x x s x m m x x x x ++++--=+-- (1.02)对式(1.02)积分两次,则得到k k k kk k k k k b x x a h x x m h x x m x s +-+-++=++)(6)(6)()(3131 (1.03)其中k k k k k b a x x h ,,1-=+为任意常数。

三次样条插值方法的应用

三次样条插值方法的应用

CENTRAL SOUTH UNIVERSITY数值分析实验报告三次样条插值方法的应用一、问题背景分段低次插值函数往往具有很好的收敛性,计算过程简单,稳定性好,并且易于在在电子计算机上实现,但其光滑性较差,对于像高速飞机的机翼形线船体放样等型值线往往要求具有二阶光滑度,即有二阶连续导数,早期工程师制图时,把富有弹性的细长木条(即所谓的样条)用压铁固定在样点上,在其他地方让他自由弯曲,然后沿木条画下曲线,称为样条曲线。

样条曲线实际上是由分段三次曲线并接而成,在连接点即样点上要求二阶导数连续,从数学上加以概括就得到数学样条这一概念。

下面我们讨论最常用的三次样条函数及其应用。

二、数学模型样条函数可以给出光滑的插值曲线(面),因此在数值逼近、常微分方程和偏微分方程的数值解及科学和工程的计算中起着重要的作用。

设区间[]b ,a 上给定有关划分b x x n =<<<=Λ10x a ,S 为[]b ,a 上满足下面条件的函数。

● )(b a C S ,2∈;● S 在每个子区间[]1,+i i x x 上是三次多项式。

则称S 为关于划分的三次样条函数。

常用的三次样条函数的边界条件有三种类型:● Ⅰ型 ()()n n n f x S f x S ''0'',==。

● Ⅱ型 ()()n n n f x S f x S ''''0'''',==,其特殊情况为()()0''''==n n x S x S 。

● Ⅲ型 ()()Λ3,2,1,0,0==j x S x S n j j ,此条件称为周期样条函数。

鉴于Ⅱ型三次样条插值函数在实际应用中的重要地位,在此主要对它进行详细介绍。

三、算法及流程按照传统的编程方法,可将公式直接转换为MATLAB可是别的语言即可;另一种是运用矩阵运算,发挥MATLAB在矩阵运算上的优势。

数学数值分析三次样条插值PPT课件

数学数值分析三次样条插值PPT课件
第2页/共40页
2.8.1 三次样条函数
定义 给定区间[a,b]的一个划分 a=x0<x1<…<xn=b, yi=f (xi) (i=0,1,…,n),如果函数S(x)满足: (1) S(xi )=yi (i=0,1,…,n); (2) 在每个小区间[xi, xi+1] (i=0,1,...,n-1)上是次数不超
S上且( xS与)(x相)的(邻x表节达x点j式的1 )为2两[hh个jj3转2角( x有关x j,)]故y j称为三h转j=x角j+方1-x程j 。
(
x
x
j
)2[hj 2( hj3
x
x j1 )] y j1
(x
x j1 )2 ( x h2j
xj)
mj
(x
x j )2( x h2j
x j1 )
m j1
则方程组化为:
2 1 2 2 2
m1 g1 1 f0
m2
g2
n2 2 n2 mn2 gn2
n1 2 mn1 gn1 n1 fn
第10页/共40页
2、已知 S( x0 ) f0, S( xn ) fn
2m0
m1
3
f
[x0 ,
x1 ]
h0 2
f0
第18页/共40页
S(
x)
M
j
(
x j1 6hj
x)3
M
j1
(x
x 6hj
j
)3
(
y
j
M jh2j 6
)
x
j1 hj
x
(
y
j1
M
j1h2j 6
)
x
x hj

数值分析——样条函数及三次样条插值

数值分析——样条函数及三次样条插值

S k ( x )是[ xk , xk + 1 ]上的(两点)三次样条插值多项式, 满足

Sk ( x j ) = y j
x → xk
k = 0,1,2, ⋯ , n − 1; j = k , k + 1
lim S k ( x ) = lim S k − 1 ( x ) + −
一、三次样条插值函数
定义1. 定义
a ≤ x0 , x1 ,⋯ , xn ≤ b为区间[ a , b ]的一个分割
如果函数S ( x )在区间[ a , b ]上满足条件 :
( 1) S ( x ), S ′( x ), S ′′( x )都在区间[ a , b ]上连续 ,即 S ( x ) ∈ C 2 [ a , b ]
f ( x j ) = y j , j = 0 ,1,⋯ , n 如果S ( x )是f ( x )的三次样条插值函数, 则其必满足
S ( x j ) = y j , j = 0 ,1,⋯ , n lim S ( x ) = S ( x j ) = y j , j = 1,⋯ , n − 1 x→ x xlim S ′( x ) = S ′( x j ) = m j , j = 1,⋯ , n − 1 →x lim S ′′( x ) = S ′′( x j ), j = 1 ,⋯ , n − 1
+ x → xk
Sk ( x j ) = y j
k
k = 0,1, ⋯ , n − 1; j = k , k + 1
− x → xk
k −1
k = 1 , 2 ,⋯ , n − 1 k = 1,2 ,⋯ , n − 1 ------(8) k = 1, 2 ,⋯ , n − 1

数值计算方法三次样条插值

数值计算方法三次样条插值
则法方程为其中平方误差为06277452对离散数据的曲线拟合最小二乘法曲线拟合问题对于fx插值问题要想提高精度就要增加节点因此多项式的次数也就太高计算量过大而节点少多项式的次数低但误差精度不能保证为了消除误差干扰取多一些节点利用最小二乘法确定低次多项式近似表示fx这就是曲线拟合问题
4.4 三次样条插值

A1


j1 (u )

(1
2
u
x hj
j 1
)(
u
xj hj
)2
A2


j (u )

(1
2
u
x hj
j
)(
u
x hj
j 1
)2
B1


j1 (u )

(u

u x j 1 )(
xj hj
)2
B2


j (u )

(u

x
j )(
u
x hj
j
)2
分段三次Hermite插值算法
I2(x)


I
n
(
x
)
x ( x0 , x1)
x ( x1, x2 ) ...... x ( xn1, xn )
其I中 j xxj1 xxj j yj1xxj xxjj 11yj yj1(xxj1)(yj yj1)/(xj xj1)
缺点:I(x)连续,但不光滑,精度较低,仅在 hm 1jan{xhj xj xj1}足够小才能较好。的逼近
ss((xxn0
) )

f f
( x0 ) (xn )

m0 mn

计算方法分段线性_三次样条插值

计算方法分段线性_三次样条插值

计算方法分段线性_三次样条插值分段线性和三次样条插值是两种常用的插值方法,在数值分析和插值问题中广泛使用。

1.分段线性插值分段线性插值是一种简单直观的插值方法,将插值区间划分为若干个子区间,在每个子区间上用线性函数进行插值。

假设给定的插值节点有n+1 个,节点为 (x0, y0), (x1, y1), ..., (xn, yn),并且满足 x0 <x1 < ... < xn。

则对于任意 xx 使得 x 在 [xi, xi+1] 之间,可以通过线性插值得到其函数值 yy,即:yy = yi + (xx - xi) * (yi+1 - yi) / (xi+1 - xi)分段线性插值方法简单易懂,适用于一些较简单的插值问题。

但是由于插值函数在节点之间是线性的,可能不能准确地反映出数据的特征,因此不适用于一些需要高精度的插值问题。

三次样条插值是一种更复杂、更精确的插值方法,将插值区间划分为若干个子区间,在每个子区间上用三次多项式进行插值。

三次样条插值方法的基本思想是找到一组三次多项式,满足在每个子区间内插值点的函数值和一阶导数值相等,并且两个相邻多项式在节点处的二阶导数值也相等。

具体的求解步骤如下:(1) 假设有 n+1 个插值节点 (x0, y0), (x1, y1), ..., (xn, yn),构造 n 个三次多项式,即每个多项式在 [xi, xi+1] 之间插值。

(2) 对每个子区间内的多项式进行插值,设第 i 个子区间的多项式为 Si(x) = ai + bi(x-xi) + ci(x-xi)^2 + di(x-xi)^3、将插值节点的函数值和一阶导数值代入多项式中,可以得到 n 个线性方程,利用这 n 个线性方程可以求解出 n 个子区间的系数。

(3)由于n个子区间的多项式必须在节点处一阶导数值相等,因此再设立n-1个方程,利用这些方程可以求解出n-1个子区间的二阶导数值。

(4)将求解得到的系数和二阶导数值代入每个子区间的多项式中,得到完整的三次样条插值函数。

数值分析三次样条插值

数值分析三次样条插值

若取等距节点 hi = h, i = 1,…, n –1
i

h h
h

1 2
i
1 i

1 2
di

6 2h
yi 1
2 yi h

yi 1


3 h3
( yi1
2 yi

yi1 )
i 1, 2,, n
例1. 对于给定的节点及函数值
k 0123 xk 1 2 4 5 f (xk ) 1 3 4 2 求满足自然边界条件S(x0 ) S(xn ) 0的三次样条 插值函数S(x),并求f (3)的近似值
Mi1
( x xi )2 2hi 1

yi1 hi 1
yi

hi 1 6
( M i 1

Mi )
于是
Si( xi )

hi 3
Mi

yi
yi1 hi

hi 6
M i 1
Si1( xi )
hi 1 3
Mi

yi1 hi 1
yi

hi 1 6
M i 1
解: 由M关系式
k

hk
hk hk 1
k

hk 1 hk hk 1
1 k
1

2 3
1

1 3
2

1 3
2

2 3
di

6

yi1 hi1
yi

yi
yi hi
1

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

《数值分析课程设计-三次样条插值》
报告
掌握三次样条插值函数的构造方法,体会三次样条插值函数对被逼近函数的近似。

三次样条插值函数边界条件由实际问题对三次样条插值在端点的状态要求给出。

以第1 边界条件为例,用节点处二阶导数表示三次样条插值函数,用追赶法求解相关方程组。

通过Matlab 编制三次样条函数的通用程序,可直接显示各区间段三次样条函数体表达式,计算出已给点插值并显示各区间分段曲线图。

引言
分段低次样条插值虽然计算简单、稳定性好、收敛性有保证且易在电子计算机上实现,但只能保证各小段曲线在连接处的连续性,不能保证整件曲线的光滑性。

利用样条插值,既可保持分段低次插值多项式,又可提高插值函数光滑性。

故给出分段三次样条插值的构造过程算法步骤,利用Matlab软件编写三次样条插值函数通用程序,并通过数值算例证明程序的正确性。

三次样条函数的定义及特征
定义:设[a,b] 上有插值节点,a=x1<x2<…xn=b,对应函数值为y1,y2,⋯yn。

若函数S(x) 满
足S(xj) = yj ( j = 1,2, ⋯,n ), S(x) 在[xj,xj+1] ( j =1,2,⋯,n-1)上都是不高于三的多项式(为了与其对应j 从1 开始,在Matlab 中元素脚标从1 开始)。

当S(x) 在 [a,b] 具有二阶连续导
数。

则称S(x) 为三次样条插值函数。

要求S(x) 只需在每个子区
间[xj,xj+1] 上确定 1 个三次多项式,设为:
Sj(x)=ajx3+bjx2+cjx+dj, (j=1,2,⋯,n-1) (1)
其中aj,bj,cj,dj 待定,并要使它满足:
S(xj)=yj, S(xj-0)=S(xj+0), (j=2,⋯,n-1) (2)
S'(xj-0)=S'(xj+0), S"(xj-0)=S"(xj+0), (j=2,⋯,n-1) (3)
式(2)、(3)共给出n+3(n-2)=4n-6 个条件,
需要待定4(n-1) 个系数,因此要唯一确定三次插值函数,还要附加2
个边界条件。

通常由实际问题对三次样条插值在端点的状态要求给
出。

常用边界的条件有以下3 类。

第 1 类边界条件:给定端点处的一阶导数值,S'(x1)=y1',S'(xn)
=yn'。

第 2 类边界条件:给定端点处的二阶导数值,S"(x1)=y1",S"(xn)
=yn"。

特殊情况y1"=yn"=0,称为自然边界条件。

第 3 类边界条件是周期性条件,如果y=f(x)是以b-a 为周期的函
数,于是S(x) 在端点处满足条件S'(x1+0)=S'(xn-0),S"(x+0)
=S"(xn-0)。

下以第 1 边界条件为例,利用节点处二阶导数来表示三次样条插值
函数,给出具体的推导过程。

2 三次样条插值函数的推导过程
注意到 S(x) 在 [xj, xj+1](j=1,2,⋯,n-1)上是三次多项式,于是S"(x)在[xj, xj+1] 上是一次多项式,如果S"(x) 在 [xj,xj+1](j=1,2,⋯,n-1)两端点上的值已知,设S"(xj)=Mj,S"(xj+1)=Mj+1,其中hj =xj+1-xj,对S"(x) 进行两次积分,则得到1 个具有2个任意常数Aj,Bj 的S(x) 表达式。

对S"(x) 求两次积分
4 三次样条插值函数的Matlab 程序设计
在 Matlab[3]环境下根据上述算法步骤进行编程,源程序如下:
function []=spline3(X,Y,dY,x0,m)
N=size(X,2);
s0=dY(1); sN=dY(2);
interval=0.025;
disp('x0为插值点')
x0
h=zeros(1,N-1);
for i=1:N-1 h(1,i)=X(i+1)-X(i); end
d(1,1)=6*((Y(1,2)-Y(1,1))/h(1,1)-s0)/h(1,1);
d(N,1)=6*(sN-(Y(1,N)-Y(1,N-1))/h(1,N-1))/h(1,N-1);
for i=2:N-1
d(i,1)=6*((Y(1,i+1)-Y(1,i))/h(1,i)-(Y(1,i)-Y(1,i-1))
/h(1,i-1))/ (h(1,i)+h(1,i-1)); endmu=zeros(1,N-1);
md=zeros(1,N-1);
md(1,N-1)=1; mu(1,1)=1;
for i=1:N-2
u=h(1,i+1)/(h(1,i)+h(1,i+1)); mu(1,i+1)=u;
md(1,i)=1-u; end
p(1,1)=2; q(1,1)=mu(1,1)/2;
for i=2:N-1
p(1,i)=2-md(1,i-1)*q(1,i-1); q(1,i)=mu(1,i)/p(1,i); end p(1,N)=2-md(1,N-1)*q(1,N-1);
y=zeros(1,N); y(1,1)=d(1)/2;
for i=2:N y(1,i)=(d(i)-md(1,i-1)*y(1,i-1))/p(1,i); end
x=zeros(1,N); x(1,N)=y(1,N);
for i=N-1:-1:1 x(1,i)=y(1,i)-q(1,i)*x(1,i+1); end
fprintf ('M为三对角方程的解\n'); M=x;
fprintf ('\n');
syms t;
digits (m);
for i=1:N-1
pp(i)=M(i)*(X(i+1)-t)^3/(6*h(i))+M(i+1)*(t-X(i))^3
/(6*h(i))+(Y(i)-M(i)*h(i)^2/6)*(X(i+1)-t)/h(i)+
(Y(i+1)-M(i+1)*h(i)^2/6)*(t-X(i))/h(i);
pp(i)=simplify(pp(i)); coeff=sym2poly(pp(i));
if length(coeff)~=4
tt=coeff(1:3); coeff(1:4)=0; coeff(2:4)=tt; end
if x0>X(i)&x0<X(i+1) L=i;
y0=coeff(1)*x0^3+coeff(2)*x0^2+coeff(3)*x0+coeff(4);
end
val=X(i):interval:X(i+1);
for k=1:length(val)
fval(k)=coeff(1)*val(k)^3+coeff(2)*val(k)^2+coeff(3)*val(k) +coeff(4); end
if mod(i,2)==1 plot(val,fval,'r+')
else plot(val,fval,'b.') end
hold on
clear val fval
ans=sym(coeff,'d');
ans=poly2sym(ans,'t');
fprintf('在区间[%f,%f]内\n',X(i),X(i+1));
fprintf('三次样条函数S(%d)=',i);
pretty(ans); end
fprintf ('x0所在区间为[%f,%f]\n',X(L),X(L+1));
fprintf ('函数在插值点x0=%f的值为\n',x0);
y0
程序中:X,Y 为输入结点,dY 为两端点一阶导数矩阵,x0 为待求插值点,m 为有效数字位数。

应用实例[1]:已知函数y=f(x)的函数值
如表1。

x0 为插值点x0=1.5;M 为三对角方程的解M=-5.0000 4.0000 4.0000 16.0000 在区间[-1.5,0.0]
内,三次样条函数S(1) t3 2t2 −1;在区间[0.0,1.0]内,三次样条函数S(2) 2t2 −1;在区间[1.0,2.0]内,三次样条函数S(3) 2t3 −4t2 6t −3。

5 结论
Matlab 环境下编写求解三次样条插值的通用程序,可直接显示各区间段三次样条函数的具体表达式,计算出已给点的插值,最后显示各区间分段曲线图,为三次样条插值函数的应用提供简便方法。

相关文档
最新文档