数值分析实验(2)word版本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析实验(2)
实验二 插值法 P50
专业班级:信计131班 姓名:段雨博 学号:2013014907 一、实验目的
1、熟悉MATLAB 编程;
2、学习插值方法及程序设计算法。 二、实验题目
1、已知函数在下列各点的值为
试用4次牛顿插值多项式()4P x 及三次样条函数()S x (自然边界条件)对数据进行插值用图给出(){},,0.20.08,0,1,11,10i i i x y x i i =+=,()4P x 及()S x 。 2、在区间[]1,1-上分别取10,20n =用两组等距节点对龙格函数()2
1125f x x =
+作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。
3、下列数据点的插值
可以得到平方根函数的近似,在区间[]0,64上作图 (1)用这9个点作8次多项式插值()8L x (2)用三次样条(第一边界条件)程序求()S x
从得到结果看在[]0,64上,哪个插值更精确;在区间[]0,1上,两种插值哪个更精确?
三、实验原理与理论基础
1、拉格朗日差值公式
)()(111k k
k k
k k x x x x y y y x L ---+
=++ 点斜式
k
k k
k k k k k
x x x x y x x x x y x L --+--=++++11111)( 两点式
2、n 次插值基函数
....,2,1,0,)()(0n j y x l y x L i j n
k k k j n ===∑=
n k x x x x x x x x x x x x x l n k n k k k k k ,...,1,0,)
()
(...
)
()
(...
)
()
()(1100=------=
--
3、牛顿插值多项式
...))(](,,[)](,[)()(102100100+--+++=x x x x x x x f x x x x f x f x P n ))...(](,...,[100---+n n x x x x x x f
)(],...,,[)()()(10x x x x f x P x f x R n n n n +=-=ω
4、三次样条函数
若函数],,[)(2b a C x S ∈且在每个小区间],[1+j j x x 上是三次多项式,其中,
b x x x a n =<<<=...10是给定节点,则称)(x S 是节点n x x x ,...,,10上的三次样条函数。若在节点j x 上给定函数值),,...,2,1,0)((n j x f y j i ==并成立,,...,2,1,0,)(n j y x S i j ==则称)(x S 为三次样条插值函数。 5、三次样条函数的边界条件
(1)0)()(''''''00''====n n f x S f x S (2)'''00')(,)(n n f x S f x S == 四、实验内容 1、M 文件:
function [p]=Newton_Polyfit(X,Y) format long g r=size(X); n=r(2);
M=ones(n,n); M(:,1)=Y'; for i=2:n
for j=i:n
M(j,i)=(M(j,i-1)-M(j-1,i-1))/(X(j)-X(j-i+1));
end
end
p0=[zeros(1,n-1) M(1,1)];p=p0;
for i=1:n-1
p1=M(i+1,i+1).*poly(X(1:i));
p0=[zeros(1,n-i-1) p1];
p=p+p0;
end
3、M文件:
function f=Language(~,~,~)
%%求已知数据点的拉格朗日插值多项式
%%已知数据点的x坐标向量:x
%%已知数据点的y坐标向量:y
%%插值点的x坐标:x0
%%解得的拉格朗日插值多项式f
x=[0.0 0.4 0.8 1.2 1.6];
y=[0 0.428392 0.722101 0.910314 0.970348];
x0=[0.3 0.5];
syms t l;
if(length(x)==length(y))
n=length(x);
else
disp('x,y维数不一样');
return;
end
p=sym(0);
for i=1:n
l=sym(y(i));
for k=1:i-1
l=l*(t-x(k))/(x(i)-x(k));
end
for k=i+1:n
l=l*(t-x(k))/(x(i)-x(k));
end
p=p+1;
end
simplify(p);
f=subs(p,'t',x0);
f=vpa(f,6);
end
五、实验结果
1、
>> X=[0.2 0.4 0.6 0.8 1.0];
>> Y=[0.98 0.92 0.81 0.64 0.38];
>> [p]=Newton_Polyfit(X,Y);
>> Y2=polyval(p,X);
>> X1=0:0.01;1;
>> Y3=interp1(X,Y,X1,'spline');
>> plot(X,Y,'o',X,Y2,'r',X1,Y3,'g')图像:
2、
>> X=-1:0.01:1;
>> Y=1./(1+25*X.^2);
>> X1=-1:0.2:1;
>> Y1=1./(1+25*X1.^2);
>> Y2=interp1(X1,Y1,X,'linear');
>> Y3=interp1(X1,Y1,X,'spline');
>> subplot(211)
>> plot(X,Y,X,Y2,'r-',X,Y3,'g-')
图像: