数值分析实验报告2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称 插值法
实验目的
(1)学习并熟练掌握MA TLAB 语言的编程;
(2)通过课程实习能够应用MATLAB 软件来计算函数的插值,了解函数插值方法。 实验原理
牛顿差商形式多项式
P(x)=f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+…+f[x0,x1,x2…xn](x-x0)…(x-xn-1) 牛顿插值多项式的余项 Rn(x)=f[x0,x1,x2…xn]wn+1(x) 实验题目
{1}已知函数在下列各点的值为
i x 0.2 0.4 0.6 0.8 1.0 ()i f x 0.98 0.92 0.81 0.64 0.38
试用4次牛顿插值多项式()4P x 及三次样条函数()Q x (自然边界条件)对数据进行插 值。用图给出{(,i i x y ),i x =0.2+0.08i ,i=0,1,11,10},()4P x 及()Q x 。 ①实验过程
x1=[0.2 0.4 0.6 0.8 1.0];
y1=[0.98 0.92 0.81 0.64 0.38]; n=length(y1); c=y1(:);
for j=2:n %求差商 for i=n:-1:j
c(i)=(c(i)-c(i-1))/(x1(i)-x1(i-j+1)); end end
syms x df d ;
df(1)=1;d(1)=y1(1);
for i=2:n %求牛顿差值多项式 df(i)=df(i-1)*(x-x1(i-1)); d(i)=c(i-1)*df(i); end
P4=vpa(sum(d),5) %P4即为4次牛顿插值多项式,并保留小数点后5位数 pp=csape(x1,y1, 'variational');%调用三次样条函数 q=pp.coefs;
q1=q(1,:)*[(x-.2)^3;(x-.2)^2;(x-.2);1]; q1=vpa(collect(q1),5)
q2=q(1,:)*[(x-.4)^3;(x-.4)^2;(x-.4);1]; q2=vpa(collect(q2),5)
q3=q(1,:)*[(x-.6)^3;(x-.6)^2;(x-.6);1];
q3=vpa(collect(q3),5)
q4=q(1,:)*[(x-.8)^3;(x-.8)^2;(x-.8);1];
q4=vpa(collect(q4),5)%求解并化简多项式
②运行结果
P4 =
- 0.20833333333212067373096942901611*x^4 - 0.20833333333212067373096942901611*x^3 + 0.15833*x^2 + 0.96833*x + 0.782
q1 =
- 1.3392857142898719757795333862305*x^3 + 0.80357*x^2 - 0.40714285714057041332125663757324*x + 1.04
q2 =
- 1.3392857142898719757795333862305*x^3 + 1.6071*x^2 - 0.8892857142927823588252067565918*x + 1.1643
q3 =
- 1.3392857142898719757795333862305*x^3 + 2.4107*x^2 - 1.6928571428579743951559066772461*x + 1.4171
q4 =
- 1.3392857142898719757795333862305*x^3 + 3.2143*x^2 - 2.8178571428288705646991729736328*x + 1.8629
③问题结果
4次牛顿差值多项式()4P x = 0.98*x - 0.3*(x - 0.2)*(x - 0.4) - 0.625*(x - 0.2)*(x - 0.4)*(x - 0.6) - 0.20833*(x - 0.2)*(x - 0.4)*(x - 0.8)*(x - 0.6) + 0.784
三次样条差值多项式()Q x =
{2}2.在区间[-1,1]上分别取n=10.20用两组等距节点对龙格函数f(x)=2
2511
x
+)做多项式及三次样条差值,对每个n 值,分别画出差值函数及f(x)的函数. 龙格图函数做多项式
function L=lagrange(a,b,a0) syms x n=length(a) L=0.0 for i=1:n l=b(i); for j=1:i-1
l=l.*(x-a(j))/(a(i)-a(j)); end
for j=i+1:n
l=l.*(x-a(j))/(a(i)-a(j)); end
L=L+l;
simplify(L);
end
L=collect(L)
L=vpa(L,6)
L=subs(L,'x',a0);
end
clear all
subplot(1,2,1);
a=linspace(-1,1,10);
b=1./(1+25.*a.^2);
L=Lagrange(a,b)
b0=subs(L,'x',a);
plot(a,b0,'rs')
hold on
plot(a,b)
title('n=10ʱµÄ²åÖµº¯Êý'); subplot(1,2,2);
a=linspace(-1,1,20);
b=1./(1+25.*a.^2);
L=Lagrange(a,b)
b0=subs(L,'x',a);
plot(a,b0,'rs');
hold on;
plot(a,b)
title('n=20ʱµÄ²åÖµº¯Êý');图像: