数值分析试验一.docx
《数值分析试验一.docx》由会员分享,可在线阅读,更多相关《数值分析试验一.docx(21页珍藏版)》请在冰豆网上搜索。
数值分析试验一
数值分析第一次实验报告
姓名:
学号:
实验1:
1.实验项目的性质和任务
通过上机实验,使学生对病态问题、线性方程组求解和函数的数值逼近方法有一个初步理解。
2.教学内容和要求
1)对高阶多多项式
编程求下面方程的解
并绘图演示方程的解与扰动量
的关系。
(实验)
2)对
,生成对应的Hilbert矩阵,计算矩阵的条件数;通过先确定解获得常向量b的方法,确定方程组
最后,用矩阵分解方法求解方程组,并分析计算结果。
(第三章,实验题4)
3)对函数
的Chebyshev点
编程进行Lagrange插值,并分析插值结果。
(第四章实验1)
项目涉及核心知识点
病态方程求解、矩阵分解和方程组求解、Lagrange插值。
重点与难点
算法设计和matlab编程。
1)a.实验方案:
先创建一个20*50的零矩阵X,然后利用Matlab中的roots()和poly()函数将50个不同的ess扰动值所产生的50个解向量分别存入X矩阵中。
然后再将ess向量分别和X的20个行向量绘图。
即可直观的看出充分小的扰动值会产生非常大的偏差。
即证明了这个问题的病态性。
b.编写程序:
>>X=zeros(20,50);
>>ve=zeros(1,21);
>>ess=linspace(0,,50);k=1;
>>whilek<=50
ve
(2)=ess(k);
X(1:
20,k)=roots(poly(1:
20)+ve);
k=k+1;
end
>>m=1;
>>whilem<=20
figure(m),plot(ess,X(m,:
));
m=m+1;
end
C.实验结果分析和拓展
由上面的实验结果可以看出一个充分小的扰动值可以让方程的解产生非常大的偏差,而且这个偏差随着ess的变大偏差也随即变大。
但可以看出在相对小的根处根比较稳定,也就是说这些根关于ess并不敏感,而在较大根处时,根很不稳定,即这些解关于ess的变化是敏感的。
这就说明了这个问题本身就是一个病态问题,与算法好坏无关。
若扰动在x^18处,只要把程序中的ve
(2)改为ve(3)即可,其图形和此类似。
d.实验结论:
高次多项式扰动求方程解问题是一个病态问题。
2)a.实验方案:
先创建一个20*20的零矩阵A,再通过给定解x和Hilbert矩阵求出列向量b,然后通过LU分解法求出方程HX=b的解X,然后将x-X’这一行向量存入A矩阵中,形成一循环,最后,如果Hilbert矩阵非病态的话,则可输出一个20*20的对角矩阵。
b.编写程序:
>>n=2;
>>A=zeros(20,20);
>>whilen<=20
x=1:
n;
H=hilb(n);
b=H*x';
[LU]=lu(H);
y=L\b;X=U\y;
A(n,1:
n)=x-X';
n=n+1;
end
Warning:
Matrixisclosetosingularorbadlyscaled.
Resultsmaybeinaccurate.RCOND=.
Warning:
Matrixisclosetosingularorbadlyscaled.
Resultsmaybeinaccurate.RCOND=.
Warning:
Matrixisclosetosingularorbadlyscaled.
Resultsmaybeinaccurate.RCOND=.
Warning:
Matrixisclosetosingularorbadlyscaled.
Resultsmaybeinaccurate.RCOND=.
Warning:
Matrixisclosetosingularorbadlyscaled.
Resultsmaybeinaccurate.RCOND=.
Warning:
Matrixisclosetosingularorbadlyscaled.
Resultsmaybeinaccurate.RCOND=.
>>A
A=
+003*
Columns1through10
0000000000
00000000
0000000
000000
00000
0000
000
00
0
Columns11through20
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
000000000
00000000
0000000
000000
00000
0000
000
00
0
C.实验结果分析和拓展:
当Hilbert矩阵的阶数比较小时,其解X和给定解x偏差不大;但当Hilbert矩阵的阶数变大时,偏差就会变大。
这就说明了Hilbert矩阵是一组病态矩阵,从Matlab运行中的Warning可以看出,其条件数相当大。
d.实验结论:
Hilbert矩阵是一组病态矩阵,用它来做线性方程的系数矩阵时,往往会得出与精确解相差较大的解。
3)a.实验方案:
在区间【-1,1】上取点,先按Chebyshev取点,即xk=cos((2k-1)pi/2/(n+1))取点,然后再进行拉格朗日插值,绘出图和插值点。
而后再进行均匀取点再拉格朗日插值。
将两种插值结果进行比较。
b.编程实现:
fora=1:
10
b=a+1;
forc=1:
b
X(c)=cos((2*c-1)*pi/2/(a+1));
Y(c)=1/(1+25*X(c)^2);
x=-1:
:
1;
end
m=length(x);
fori=1:
m
z=x(i);s=0;
fork=1:
b
L=1;
forj=1:
b
ifj~=k
L=L*(z-X(j))/(X(k)-X(j));
end
end
s=s+L*Y(k);
end
y(i)=s;
end
figure
(1)
plot(x,y,'r');
holdon;
figure
(2)
plot(X,Y,'b*')
holdon
end
fora=2:
2:
10
b=a+1;
X=linspace(-1,1,b);
Y=1./(1+25*X.^2);
x=-1:
:
1;
m=length(x);
fori=1:
m
z=x(i);s=0;
fork=1:
b
L=1;
forj=1:
b
ifj~=k
L=L*(z-X(j))/(X(k)-X(j));
end
end
s=s+L*Y(k);
end
y(i)=s;
end
figure
(1)
plot(x,y,'r');
holdon;
figure
(2)
plot(X,Y,'b*')
holdon
end
C.实验结果分析及拓展:
均匀插值时,当n比较大时,就会出现多项式插值的Runge现象,即当插值节点的个数n增加时,Lagrange插值多项式对原来函数的近似并非越来越好。
当进行非等距节点插值时,其近似效果明显要比均匀插值是要好。
原因是非均匀插值时,在远离原点处的插值节点比较密集,所以其插值近似效果要比均匀插值时的效果要好。
d.实验结论:
利用Chebyshev点进行非等距节点插值的对原函数的近似效果要比均匀节点插值的好。