现代数值计算方法实验三

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档