数值分析matlab实验报告.
实验2.1 多项式差值的振荡现象
一、实验内容
,考虑区间[-1,1]的一个等距划分,分点为,i=0,1,2,...,n,.其中,li(x),i=0,1,2,...,n是Lagrange插值基函数.
选择不断增大的分点数目n=2,3,...,画出原函数f(x)及插值多项式函数Ln(x)在[-1,1]上的图像,比较并分析实验结果.
选择其他的函数,例如定义在区间[-5,5]上的函数,,重复上述的实验看其结果如何.
二、实验程序
function chapter2
promps={'请选择试验函数,若选f(x),请输入f,若选好h(x),请输入h,若选g(x),请输入g:'};
result=inputdlg(promps,'charpt 2',1,{'f'});
Nb_f=char(result);
if(Nb_f~='f'&&Nb_f~='h'&&Nb_f~='g')
errordlg('试验函数选择错误!');
return;
end
result=inputdlg({'请输入插值多项式的次数N:'},'charpt_2',1,{'10'});
Nd=str2num(char(result));
if(Nd<1)
errordlg('插值多项式的次数输入错误!');
return;
end
switch Nb_f
case'f'
f=inline('1./(1+25*x.^2)');a=-1;b=1;
case'h'
f=inline('x./(1+x.^4)');a=-5;b=5;
case'g'
f=inline('atan(x)');a=-5;b=5;
end
x0=linspace(a,b,Nd+1);y0=feval(f,x0);
x=a:0.1:b;y=Lagrange(x0,y0,x);
clf;
fplot(f,[a b],'rx');
hold on;
plot(x,y,'b--');
xlabel('x');ylabel('y=f(x) x and y=Ln(x) --');
2.Lagrange函数
function y=Lagrange(x0,y0,x)
n=length(x0);
m=length(x);
for i=1:m
z=x(i);
s=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=s+p*y0(k);
end
y(i)=s;
end
三、实验结果及分析
1) 选择不断增大的分点数目n,原函数f(x)及插值多项式函数Ln(x)在[-1,1]上的图像。
随着提高插值多项式次数,可以提高逼近的精度,但是次数的增加,在区间两端点附近与原函数偏离很远,即出现了Runge现象。
2) 选择不断增大的分点数目n,原函数h(x)及插值多项式函数Ln(x)在[-1,1]上的图像。
选择不断增大的分点数目n,原函数g(x)及插值多项式函数Ln(x)在[-1,1]上的图像。
同样,随着提高插值多项式次数,可以提高逼近的精度,但是次数的增加,在区间两端点附近与原函数偏离很远,即出现了Runge现象。
实验3.1最小二乘拟合
一、实验内容
为基的多项式最小二乘拟合程序,并用于对下表中数据作3次多项式最小二乘拟合.
xi-1.0-0.50.00.51.01.52.0yi-4.447-0.4520.5510.048-0.4470.5494.552取权数,求拟合曲线中的参数、平方误差,并作离散数据的拟合函数的图形.
二、实验程序
function chapter3
x0=-1:0.5:2;
y0=[-4.447 -0.452 0.551 0.048 -0.447 0.549 4.552];
n=3;
alph=polyfit(x0,y0,n);
y=polyval(alph,x0);
r=(y0-y)*(y0-y)';
x=-1:0.01:2;
y=polyval(alph,x);
plot(x,y,'k--');
xlabel('x');ylabel('y0 * and polyfit. y-.');
hold on;
plot(x0,y0,'*');
title('离散数据的多项式拟合');
grid