分段线性插值与三次样条插值法.docx
《分段线性插值与三次样条插值法.docx》由会员分享,可在线阅读,更多相关《分段线性插值与三次样条插值法.docx(7页珍藏版)》请在冰点文库上搜索。
分段线性插值与三次样条插值法
实验报告
实验项目
插值法
实验日期
2016/9/3
0
理论内容
分段线性插值与三次样条插值
授课日期
2016/9/0
实验室名称
文理管203
微机编号
E1
实验目的及要求:
1、学会常用的插值方法,求函数的近似表达式,以解决其它实际问题;
2、明确插值多项式和分段插值多项式各自的优缺点;
3、熟悉插值方法的程序编制;如果绘出插值函数的曲线,观察其光滑性。
实验内容:
编写分段线性插值法及三次样条插值法通用子程序,依据数据表
Xi
2.0
2.1
2.2
2.3
2.4
1.41421
1.4491
1.48334
1.5165
1.5491
4
38
0
75
93
构造相应的插值多项式,并计算函数f(x)x在x2.15的近似值
实验步骤及程序:
1、分段线性插值法流程图
2、分段线性插值法源程序:
function[f]=fenduan(
x=[2.02.12.22.32.4];
y=[1.4142141.4491381.4833401.5165751.549193];
y_1=0.5*y.A(-0.5);
x0=2.15;
f=0.0;
if(length(x)==length(y))
if(length(y)==length(y_1))
n=length(x);
else
disp('y和y的导数的维数不相等!
');
return;
end
else
disp('x和y的维数不相等!
');
return;
end
fori=1:
n
if(x(i)<=xO)&&(x(i+1)>=xO)
index=i;
break;
end
end
h=x(index+1)-x(index);
fl=y(index)*(1+2*(x0-x(index))/h)*(xO-x(index+1))A2/h/h+...
y(index+1)*(1-2*(x0-x(index+1))/h)*(x0-x(index))A2/h/h;
f=fl;
3、三次样条插值法流程图
4、三次样条插值法源程序
function[yy,b,c,d]=spline3(〜,〜,〜,〜,〜,〜)
%三次样条插值函数%(x,y)为插值节点,xx为插值点;
%flag表端点边界条件类型:
%flag=O:
自然样条(端点二阶导数为0);
%flag=1:
第一类边界条件(端点一阶导数给定);
%flag=2:
第二类边界条件(端点二阶导数给定);
%vl,vr表左右端点处的在边界条件值。
%样条函数为:
Si(x)=yi+bi*(x-xi)+ci*(x-xi)A2+di*(x-xi)A3
%b,c,d分别为各子区间上的系数值
%yy表插值点处的函数值.
x=[2.02.12.22.32.4];
y=[1.4142141.4491381.4833401.5165751.549193];
xx=2.15;
flag=0;
vl=2.0;
vr=2.4;
iflength(x)==length(y)
n=length(x);
a=zeros(n-1,1);
b=a;
d=a;
dx=a;
dy=a;
A=zeros(n);
B=zeros(n,1);
end
fori=1:
n-1
a(i)=y(i);
dx(i)=x(i+1)-x(i);
dy(i)=y(i+i)-y(i);
end
fori=2:
n-1
A(i,i-1)=dx(i-1);
A(i,i)=2*(dx(i-1)+dx(i));
A(i,i+1)=dx(i);
B(i,1)=3*(dy(i)/dx(i)-dy(i-1)/dx(i-1));
end
%自然样条端点条件(端点二阶导数为零)%
ifflag==O;
A(1,1)=1;
A(n,n)=1;
end
%%
%端点一阶导数条件%
ifflag==1
A(1,1)=2*dx
(1);
A(1,2)=dx
(1);
A(n,n-1)=dx(n-1);
A(n,n)=2*dx(n-1);
B(1,1)=3*(dy
(1)/dx
(1)-vl);
B(n,1)=3*(vr-dy(n-1)/dx(n-1));
end
%%
%端点二阶导数条件%
ifflag==2
A(1,1)=2;
A(n,n)=2;
B(1,1)=vl;
B(n,1)=vr;
end
%%
c=A\B;
fori=1:
n-1
d(i)=(c(i+1)-c(i))/(3*dx(i));
b(i)=dy(i)/dx(i)-dx(i)*(2*c(i)+c(i+1))/3;end
[mm,nn]=size(xx);
yy=zeros(mm,nn);
fori=1:
mm*nn
forii=1:
n-1
ifxx(i)>=x(ii)&&xx(i)j=ii;
break;
elseifxx(i)==x(n)
j=n-1;
end
end
j)*(xx(i)-x(j))A3;
yy(i)=a(j)+b(j)*(xx(i)-x(j))+c(j)*(xx(i)-x(j))A2+d(
end
end
结果分析与讨论:
运用MATLAB分别对分段线性插值和三次样条插值进行编程的到数值均为
1.4664
说明实验结果准确无误,通过实验可以得出,在低阶方程的求解中,两种方法均能精确的得到近似解,但是在高阶方程的求解中三次样条插值方法更加精确,误差较小,由于运用追赶法求解,速度要比分段线性插值更加的快,这就说明在应对不同阶数的方程时,我们应该选用最优方法。
评分项目
满分
得分
评分项目
满分
得分
实验步骤及程序
10
运行结果
5
结果分析与讨论
5
合计
20