电子科大数值分析实验

更新时间:2023-05-25 09:36:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数值分析实验作业

实验报告

一、实验内容:

(1)对高阶多多项式

20

p(x) (x 1)(x 2) (x 20)

(x k)

k 1

编程求下面方程的解

p(x) x

19

0

并绘图演示方程的解与扰动量 的关系。

(2)对n 2~20,生成对应的Hilbert矩阵,计算矩阵的条件数;通过先确定解获得常向量b的方法,确定方程组

Hnx b

最后,用矩阵分解方法求解方程组,并分析计算结果。 (3)对函数

f(x)

11 25x

2

x [ 1,1]

的Chebyshev点

xk cos(

(2k 1) 2(n 1)

)

k 1,2,...,n 1

编程进行Lagrange插值,并分析插值结果。

二、实验过程:

实验一: 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,0.00001,50);k=1;

数值分析实验作业

>> while k<=50 ve(2)=ess(k);

X(1:20,k)=roots(poly(1:20)+ve); k=k+1; end >> m=1; >> while m<=20

figure(m),plot(ess,X(m,:)); m=m+1; end c. 实验结果:

数值分析实验作业

数值分析实验作业

d. 实验结果分析:

由上面的实验结果可以看出一个充分小的扰动值可以让方程的解产生非常大的偏差,而且这个偏差随着ess的变大偏差也随即变大。但可以看出在相对小的根处根比较稳定,也就是说这些根关于ess并不敏感,而在较大根处时,根很不稳定,即这些解关于ess的变化是敏感的。这就说明了这个问题本身就是一个病态问题,与算法好坏无关。

若扰动在x^18处,只要把程序中的ve(2)改为ve(3)即可,其图形和此类似。

由上可得出结论高次多项式扰动求方程解问题是一个病态问题。 实验二: a. 实验方案:

数值分析实验作业

先创建一个20*20的零矩阵A,再通过给定解x和Hilbert矩阵求出列向量b,然后通过LU分解法求出方程HX=b的解X,然后将x-X’这一行向量存入A矩阵中,形成一循环,最后,如果Hilbert矩阵非病态的话,则可输出一个20*20的对角矩阵。

b. 编写程序: >> n=2;

>> A=zeros(20,20); >> while n<=20 x=1:n; H=hilb(n); b=H*x'; [L U]=lu(H); y=L\b;X=U\y; A(n,1:n)=x-X'; n=n+1; end c. 实验结果: A =

1.0e+003 *

Columns 1 through 10

0 0 0 0 0 -0.0000 0.0000 0 0 0 -0.0000 0.0000 0 0 0 -0.0000 0.0000 0 0 0 0.0000 -0.0000 0 0 0 0.0000 -0.0000 0 0 0 0.0000 -0.0000 0.0000 0 0 0 0

0 0

-0.0000 0

-0.0000 0

0.0000 0

0.0000 0

0.0000 0

0 0 0 0.0000 -0.0000 -0.0000 -0.0000 0 0 0 0 0.0000 0.0000 0.0000 0 0 0 0 0 -0.0000 -0.0000

数值分析实验作业

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 0 0

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0001 0.0006 -0.0007 0.0005

0.0000 -0.0000 0.0000 -0.0001 0.0005 0.0096 -0.0223 0.0348 -0.0361

0.0000 -0.0000 0.0000 -0.0004 0.0030 0.0080 0.0593 -0.2570 0.5154

0.0000 -0.0000 0.0000 -0.0001 0.0005 0.0095 -0.0171 0.0086 0.0347

0.0000 -0.0000 0.0000 -0.0000 0.0003 0.0059 -0.0133 0.0145 0.0094

0.0000 -0.0000 0.0000 -0.0001 0.0009 0.0118 -0.0182 0.0082 0.0185

0.0000 0.0000 -0.0000 0.0002 -0.0027 -0.0762 0.1806 -0.2249 0.0813

0.0000 0.0000 -0.0000 0.0001 -0.0017 -0.0497 0.1224 -0.1699 0.1064

0.0000 -0.0000 0.0000 -0.0003 0.0028 0.0371 -0.0464 -0.0164 0.1243

Columns 11 through 20

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 -0.0003 -0.0027 -0.0098 -0.0029 -0.0016 -0.0042 0.0187 0.0120 -0.0137 0 0 0 0

数值分析实验作业

0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

-0.0000 0 0 0 0 0 0 0 0

-0.0002 0.0000 0 0 0 0 0 0 0

0.0238 -0.0091 0.0015 0 0 0 0 0 0

-0.6091 0.4336 -0.1727 0.0296 0 0 0 0 0

-0.0944 0.1170 -0.0824 0.0318 -0.0053 0 0 0 0

-0.0624 0.1107 -0.1110 0.0674 -0.0232 0 0 0 0

-0.0289 0.0059 0.0103 0.0082 -0.0263 -0.0042 0 0 0

0.0524 0.1690 -0.3743 -0.1862 1.0944 0.6004 -0.1156 0 0

-0.0327 0.1652 -0.3051 -0.0485 0.7195 -0.9387 -0.1699 0.0191 0

-0.1120 -0.0421 0.0883 0.0222 -0.0628 0.1013 0.3783 -0.2173 0.0469

d. 实验结果分析:

0 0 0 0 0 0 0 0 0.0035 0.0181 -1.2171 0.5714 -0.2902

数值分析实验作业

当Hilbert矩阵的阶数比较小时,其解X和给定解x偏差不大;但当Hilbert矩阵的阶数变大时,偏差就会变大。这就说明了Hilbert矩阵是一组病态矩阵,从Matlab运行中的Warning可以看出,其条件数相当大。

e.实验结论:

Hilbert矩阵是一组病态矩阵,用它来做线性方程的系数矩阵时,往往会得出与精确解相差较大的解。

实验三: a. 实验方案:

在区间[-1,1]上取点,先按Chebyshev取点,即xk=cos((2k-1)pi/2/(n+1))取点,然后再进行拉格朗日插值,绘出图和插值点。而后再进行均匀取点再拉格朗日插值。将两种插值结果进行比较。

b. 编写程序: 程序1: for a=1:10 b=a+1; for c=1:b

X(c)=cos((2*c-1)*pi/2/(a+1)); Y(c)=1/(1+25*X(c)^2); x=-1:0.05:1; end m=length(x); for i=1:m z=x(i);s=0; for k=1:b L=1; for j=1:b if j~=k

L=L*(z-X(j))/(X(k)-X(j)); end end s=s+L*Y(k); end y(i)=s; end

数值分析实验作业

plot(x,y,'r'); hold on; figure(2) plot(X,Y,'b*') hold on end 程序2: for a=2:2:10 b=a+1;

X=linspace(-1,1,b); Y=1./(1+25*X.^2); x=-1:0.05:1;

m=length(x); for i=1:m z=x(i);s=0; for k=1:b L=1; for j=1:b if j~=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'); hold on; figure(2) plot(X,Y,'b*')

数值分析实验作业

end

c. 实验结果: 程序1:

1

0.5

-0.5-1

-0.8-0.6-0.4-0.200.20.40.60.81

数值分析实验作业

-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

1

程序2:

2

1.5

1

0.5

-0.5

-1-1

-0.8-0.6-0.4-0.200.20.40.60.81

数值分析实验作业

-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

1

d. 实验结果分析:

均匀插值时,当n比较大时,就会出现多项式插值的Runge现象,即当插值节点的个数n增加时,Lagrange插值多项式对原来函数的近似并非越来越好。当进行非等距节点插值时,其近似效果明显要比均匀插值是要好。原因是非均匀插值时,在远离原点处的插值节点比较密集,所以其插值近似效果要比均匀插值时的效果要好。

e.实验结论:

利用Chebyshev点进行非等距节点插值的对原函数的近似效果要比均匀节点插值的好。

本文来源:https://www.bwwdw.com/article/dat4.html

Top