现代数值计算方法实验三
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
实验三 插值法与拟合实验
一、实验目的
1、懂得利用数据建模两种方法(插值法和拟合多项式法)对一批数据()11,y x ,
()22,y x ,……,()n n y x ,进行处理,学会对数据的结果进行误差分析.
2、比较分析这些方法的优缺点,并且在适合的场合应用相应的方法.
二、实验题目
1. 插值效果的比较
实验题目:将区间][5,5-10等分,对下列函数分别计算插值节点k x 的值,进行不同类型的插值,作出插值函数的图形并与()x f y =的图形进行比较:
)2
11x
x f +=
; ()x x f a r c t a n =; ()4
21x
x
x f +=
.
(1) 做拉格朗日插值; (2) 做三次样条插值. 2. 拟合多项式实验
实验题目:给定数据点如下表所示:
分别对上述数据作三次多项式和五次多项式拟合,并求平方误差,作出离散函数(i x ,i y )和拟合函数的图形.
三、实验原理
数据建模有两大方法:一类是插值方法,要求所要函数()x ϕ严格遵守从数
据()11,y x ,()22,y x ,……,()n n y x ,;另一类是拟合方法,允许函数()x ϕ在数据点上的有误差,但是要求达到某种误差指标的最小化.
第一题
⑴拉格朗日插值算法原理
%malagr.m
function yy=malagr(x,y,xx)
%用途:拉格朗日插值法求解
%格式:yy=malagr(x,y,xx), x是节点向量,y是节点对应的函数值向量,% xx是插值点(可以是多个),,yy返回插值结果
m=length(x);n=length(y);
if m~=n, error('向量x与y的长度必须一致');end
s=0;
for i=1:n
t=ones(1,length(xx));
for j=1:n
if j~=i
t=t.*(xx-x(j))/(x(i)-x(j));
end
end
s=s+t*y(i);
end
yy=s;
end
⑵三次样条插值算法原理:
%maspline.m
function m=maspline(x,y,dy0,dyn,xx)
%用途:三阶样条插值(一阶导数边界条件)
%格式:m=maspline(x,y,dy0,dyn,xx), x为节点向量,y为数据,
%dy0,dyn为左右两端点的一阶导数如果xx缺省,则输出各节点的
%的一阶导数值,,m为xx的三阶样条插值
format short;
n=length(x)-1; %计算小区间的个数
h=diff(x); lambda=h(2:n)./(h(1:n-1)+h(2:n)); mu=1-lambda;
theta=3*(lambda.*diff(y(1:n))./h(1:n-1)+mu.*diff(y(2:n+1))./h(2:n)); theta(1)=theta(1)-lambda(1)*dy0;
theta(n-1)=theta(n-1)-lambda(n-1)*dyn;
%追赶法解散对焦方程组
dy=machase(lambda,2*ones(1:n-1),mu,theta);
%若给插值点,计算插值
m=[dy0;dy;dyn];
if nargin>=5
s=zeros(size(xx));
for i=1:n
if i==1
kk=find(xx<=x(2));
elseif i==n
kk=find(xx>x(n));
else
kk=find(xx>x(i)&xx<=x(i+1));
end
xbar=(xx(kk)-x(i))/h(i);
s(kk)=alpha0(xbar)*y(i)+alpha1(xbar)*y(i+1)+...
+h(i)*beta0(xbar)*m(i)+h(i)*beta1(xbar)*m(i+1);
end
m=s;
end
%追赶法
function x=machase(a,b,c,d)
n=length(a);
for k=2:n
b(k)=b(k)-a(k)/b(k-1)*c(k-1);
d(k)=d(k)-a(k)/b(k-1)*d(k-1);
end
x(n)=d(n)/b(n);
for k=n-1:-1:1
x(k)=(d(k)-c(k)*x(k+1))/b(k);
end
x=x(:);
%基函数
function y=alpha0(x)
y=2*x.^3-3*x.^2+1;
function y=alpha1(x)
y=-2*x.^3+3*x.^2;
function y=beta0(x)
y=x.^3-2*x.^2+x;
function y=beta1(x)
y=x.^3-x.^2;
第二题:多项式拟合算法原理:
%mafit.m
function p=mafit(x,y,m)
% 用途:多项式拟合
%格式:p=mafit(x,y,m), x, y为数据向量,m为拟合多项式次数,p返回%多项式系数降幂排列
format short;
A=zeros(m+1,m+1);
for i=0:m
for j=0:m