数值分析第一次实验报告

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

数值分析上机实验报告
题目:插值法
学生姓名
学院名称计算机学院
专业计算机科学与技术时间
一. 实验目的
1、掌握三种插值方法:牛顿多项式插值,三次样条插值,拉格朗日插值
2、学会matlab提供的插值函数的使用方法
二.实验内容
1、已知函数在下列各点的值为
试用4次牛顿插值多项式P4(x)及三次样条函数S(x)(自然边界条件)对数据进行插值。

用图给出
{(x i,y i),x i=0.2+0.08i,i=0,1,11,10},P4(x)及S(x)。

2、在区间[-1,1]上分别取n=10,20用两组等距节点对龙格函数
f(x)=1/(1+25x2)作多项式插值及三次样条插值,对每个n值,分别画出插值函数及f(x)的图形。

3、下列数据点的插值
可以得到平方根函数的近似,在区间[0,64]上作图。

(1)用这9个点作8次多项式插值L8(x)
(2)用三次样条(第一边界条件)程序求S(x)
从得到结果看在[0,64]上,哪个插值更精确,在区间[0,1]上。

两种插值哪个更精确?
三.实现方法
1. 进入matlab开发环境
2. 依据算法编写代码
3. 调试程序
4. 运行程序
5. (1)牛顿插值多项式:
P n=f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+…+f[x0,x1,…,x n] (x-x0)(x-x n-1)
三次样条插值:
用三次样条插值函数由题目分析知,要求各点的M值:
6.实验代码如下:
(1)牛顿插值多项式程序:
function varargout=newton(varargin)
clear,clc
x=[0.2 0.4 0.6 0.8 1.0]; fx=[0.98 0.92 0.81 0.64 0.38]; newtonchzh(x,fx);
function newtonchzh(x,fx)
n=length(x);
FF=ones(n,n); FF(:,1)=fx';
for i=2:n
for j=i:n
FF(j,i)=(FF(j,i-1)-FF(j-1,i-1))/(x(j)-x(j-i+1));
end
end
for i=1:n
fprintf('%4.2f',x(i)); for j=1:i
fprintf('%10.5f',FF(i,j)); end
fprintf('\n');
end
三次样条插值程序:
function sanciyangtiao(n,s,t)
x=[0.2 0.4 0.6 0.8 1.0];
y=[0.98 0.92 0.81 0.64 0.38];
n=5
for j=1:1:n-1
h(j)=x(j+1)-x(j);
end
for j=2:1:n-1
r(j)=h(j)/(h(j)+h(j-1));
end
for j=1:1:n-1
u(j)=1-r(j);
end
for j=1:1:n-1
f(j)=(y(j+1)-y(j))/h(j);
end
for j=2:1:n-1
d(j)=6*(f(j)-f(j-1))/(h(j-1)+h(j));
end
d(1)=0
d(n)=0
a=zeros(n,n);
for j=1:1:n
a(j,j)=2;
end
r(1)=0;u(n)=0;
for j=1:1:n-1
a(j+1,j)=u(j+1);a(j,j+1)=r(j);
end
b=inv(a)
m=b*d'
p=zeros(n-1,4);
for j=1:1:n-1
p(j,1)=m(j)/(6*h(j));
p(j,2)=m(j+1)/(6*h(j));
p(j,3)=(y(j)-m(j)*(h(j)^2/6))/h(j);
p(j,4)=(y(j+1)-m(j+1)*(h(j)^2/6))/h(j);
end
end
图程序:
x=[0.2 0.4 0.6 0.8 1.0];
y=[0.98 0.92 0.81 0.64 0.38];
plot(x,y)
hold on
for i=1:1:5
y(i)=0.98-0.3*(x(i)-0.2)-0.62500*(x(i)-0.2)*(x(i)-0.4)
-0.20833*(x(i)-0.2)*(x(i)-0.4)*(x(i)-0.6)-0.52083*(x(i)-0.2)*(x(i)-0.
4)*(x(i)-0.6)*(x(i)-0.8)
end
k=[0 1 10 11]
x0=0.2+0.08*k
for i=1:1:4
y0(i)=0.98-0.3*(x(i)-0.2)-0.62500*(x(i)-0.2)*(x(i)-0.4)
-0.20833*(x(i)-0.2)*(x(i)-0.4)*(x(i)-0.6)-0.52083*(x(i)-0.2)*(x(i)-0.
4)*(x(i)-0.6)*(x(i)-0.8)
end
plot( x0,y0,'o',x0,y0 )
hold on
y1=spline(x,y,x0)
plot(x0,y1,'o')
hold on
s=csape(x,y,'variational')
fnplt(s,'r')
hold on
gtext('Èý´ÎÑùÌõ×ÔÈ»±ß½ç')
gtext('Ô-ͼÏñ')
gtext('4´ÎÅ£¶Ù²åÖµ')
(2)多项式插值程序:
function [C,D]=longge(X,Y)
n=length(X);
D=zeros(n,n)
D(:,1)=Y'
for j=2:n
for k=j:n
D(k,j)=(D(k,j-1)- D(k-1,j-1))/(X(k)-X(k-j+1));
end
end
C=D(n,n);
for k=(n-1):-1:1
C=conv(C,poly(X(k)))
m=length(C);
C(m)= C(m)+D(k,k);
end
end
三次样条插值程序:
function S=longgesanci(X,Y,dx0,dxn)
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));
B(N-1)=B(N-1)-H(N)/2;
U(N-1)=U(N-1)-3*(-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
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
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
end
(3)三次样条函数程序代码:
function sanci3(n,s,t)
y=[0 1 2 3 4 5 6 7 8];
x=[0 1 4 9 16 25 36 49 64];
n=9
for j=1:1:n-1
h(j)=x(j+1)-x(j);
end
for j=2:1:n-1
r(j)=h(j)/(h(j)+h(j-1));
end
for j=1:1:n-1
u(j)=1-r(j);
end
for j=1:1:n-1
f(j)=(y(j+1)-y(j))/h(j);
end
for j=2:1:n-1
d(j)=6*(f(j)-f(j-1))/(h(j-1)+h(j));
end
d(1)=0
d(n)=0
a=zeros(n,n);
for j=1:1:n
a(j,j)=2;
end
r(1)=0;
u(n)=0;
for j=1:1:n-1
a(j+1,j)=u(j+1);
a(j,j+1)=r(j);
end
b=inv(a) m=b*d' t=a
p=zeros(n-1,4);
p(j,1)=m(j)/(6*h(j));
p(j,2)=m(j+1)/(6*h(j));
p(j,3)=(y(j)-m(j)*(h(j)^2/6))/h(j);
p(j,4)=(y(j+1)-m(j+1)*(h(j)^2/6))/h(j); end
拉格朗日插值程序:
function y=lagrange(x0,y0,x)
n=length(x0);
m=length(x);
for i=1:m
z=x(i);
s=0.0;
for k=1:n
p=1.0;
for j=1:n
if j~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end
end
四.实验结果
1.牛顿插值多项式结果:
所以有四次插值牛顿多项式为: P4(x)=0.98-0.3(x-0.2)-0.62500(x-0.2)(x-0.4)-0.20833(x-0.2)(x-0.4)(x-0.6)-0.52083(x-0.2)(x-0.4)(x-0.6)(x-0.8)
三次样条插值结果:
得到m=(0 -1.6071 -1.0714 -3.1071 0),则可得:图形为:
2.多项式插值,n=10时:n=20时:
三次样条插值,n=10时:n=20时:
3.
三次样条插值程序结果:
解得:
M0=0;M1=-0.5209;M2=0.0558;M3=-0.0261;M4=0.0006;M5=-0.0029;M6=-0.0008;M7=--0.0009;M8=0;
则三次样条函数:
图形:
[0,64]:
在区间[0,64]上从图3-2中可以看出蓝色虚线条和绿色线条是几乎重合的,而红色线条在[30,70]之间有很大的起伏,所在在区间[0,64]三次样条插值更精确。

[0,1]:
红色的线条与蓝色虚线条几乎重合,所以可知拉格朗日插值函数的曲线更接近开平方根的函数曲线,在[0,1]朗格朗日插值更精确五.总结感悟
通过此次实验,我对几种插值方法:牛顿多项式插值,三次样条插值和拉格朗日插值有了更深的了解,知道了三次样条的拟合程度在高次的情况下更高,在利用计算机编程软件进行高次插值的时候,我们可以多考虑利用三次样条进行插值。

相关文档
最新文档