实验四数值微积分实验报告[大全五篇]

时间:2020-11-15 12:20:05下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《实验四数值微积分实验报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《实验四数值微积分实验报告》。

第一篇:实验四数值微积分实验报告

数值微积分 实验报告 姓名:王旭

学号:AS1010131 一、实验目的 1.掌握各种复化求积公式,并利用它们求定积分; 2.掌握比较一阶导数和二阶导数的数值方法; 3.通过用不同复化求积公式计算定积分,并与精确解得比较,明白各个复化求积公式的优缺点。

二、

实验题目 1、、本 书本 118 页 页 5.1 单数题 :

format long fun=inline(“2/(1-x^2)”)matrap(fun,2,3,10)

2、、本 书本 118 页 页 5.2 单数题:

fun=inline(“sin(x)/(x)”)masimp(fun,0,1,5)

2、比较一阶导数和二阶导数的数值方法 利用等距节点的函数值和端点的导数值,用不同的方法求下列函数的一阶和二阶导数,分析各种方法的有效性,并用绘图软件绘出函数的图形,观察其特点。

解:

对于方程3 5611201x x y  ,  2 , 0  x,利用程序 shiyan2 2 _01.m

内容如下:

clear

clc

fun=inline(“x.^5/20--(11./6)*x.^3”);

dfun=inline(“x.^4/4--(11./2)*x.^2”);

ddfun=inline(“x.^3--11*x”);

n=8;h=2/n;

x=0:h:2;x1=x(2:n);

y=feval(fun,x);

dy=feval(dfun,x1);

ddy=feval(ddfun,x1);

for i=2:n

dy1(i)=(y(i+1)--y(i))/h;

dy2(i)=(y(i)--y(i--1))/h;

dy3(i)=(y(i+1)--y(i--1))/(2*h);

ddy1(i)=(y(i+1)--2*y(i)+y(i--1))/(h *h);

end

for i=1:n--1 1

err1(i)=abs(dy1(i)--dy(i));

err2(i)=abs(dy2(i)--dy(i));

err3(i)=abs(dy3(i)--dy(i));

errd2(i)=abs(ddy1(i)--ddy(i));

end

[err1“ err2” err3“ errd2”]

plot(x,y,“r”)

hold on

plot(x1,dy,“y”)

plot(x1,ddy,“k”)

结果分析:

向前插商不能计算最后一个端点的导数, 向后插商不能计算第一个端点的导数, 中心插商和二阶求导不能计算第一个和最后一个端点的导数。

第二篇:电子商务实验报告实验四

实验四 手机银行业务------招商银行手机银行业务及其

安全机制(选做)

一、实验目的

1、掌握招商银行手机银行业务支付流程及相关概念;

2、了解招商银行手机银行业务的服务内容;

3、理解招商银行手机银行业务的安全机制;

二、实验内容

1.浏览招商银行网站(http://www.xiexiebang.com/)

2.了解招商银行手机银行业务

3.熟悉招商银行手机银行业务(http://mobile.cmbchina.com/MobileWeb)的电子支付流程及有关规定。浏览并理解招商银行手机银行业务的安全机制.先登录再进行各项业务的操作,并且记录操作流程。

三、思考题:

1.思考网上手机银行存在哪些安全问题?

手机银行遇到的安全问题主要有两个,一是手机遗失;二是手机遭黑客入侵。专家表示,若无动态密码,若仅凭借账号、账户的交易密码和手机验证码操作,手机一旦被盗窃或验证短信被复制、拦截,那么手机银行的账户资金安全就会受到威胁。

2.你认为影响用户进行手机支付的因素有哪些?

(1)大多数手机用户都遭遇过垃圾信息(短信、彩信、电话)的骚扰。(2)机卡分离模式以及难以落实的手机实名制。

(3)手机支付在我国尚属初级阶段,运营商与银行两套系统间的业务融合一时难以完成。(4)手机支付利益各方还未达成统一的结算标准。

(5)虽然从技术上已经解决了手机支付的安全问题,但手机支付标准的统一仍需一段时间。(6)长期以来使用现金、银行卡消费已经成为一种消费习惯.

第三篇:清华大学数值分析实验报告

数值分析实验报告

一、实验3.1

题目:

考虑线性方程组,,编制一个能自动选取主元,又能手动选取主元的求解线性代数方程组的Gauss消去过程。

(1)取矩阵,则方程有解。取计算矩阵的条件数。分别用顺序Gauss消元、列主元Gauss消元和完全选主元Gauss消元方法求解,结果如何?

(2)现选择程序中手动选取主元的功能,每步消去过程都选取模最小或按模尽可能小的元素作为主元进行消元,观察并记录计算结果,若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。

(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。

(4)选取其他你感兴趣的问题或者随机生成的矩阵,计算其条件数,重复上述实验,观察记录并分析实验的结果。

1.算法介绍

首先,分析各种算法消去过程的计算公式,顺序高斯消去法:

第k步消去中,设增广矩阵中的元素(若等于零则可以判定系数矩阵为奇异矩阵,停止计算),则对k行以下各行计算,分别用乘以增广矩阵的第行并加到第行,则可将增广矩阵中第列中以下的元素消为零;重复此方法,从第1步进行到第n-1步,则可以得到最终的增广矩阵,即;

列主元高斯消去法:

第k步消去中,在增广矩阵中的子方阵中,选取使得,当时,对中第行与第行交换,然后按照和顺序消去法相同的步骤进行。重复此方法,从第1步进行第n-1步,就可以得到最终的增广矩阵,即;

完全主元高斯消去法:

第k步消去中,在增广矩阵中对应的子方阵中,选取使得,若或,则对中第行与第行、第列与第列交换,然后按照和顺序消去法相同的步骤进行即可。重复此方法,从第1步进行到第n-1步,就可以得到最终的增广矩阵,即;

接下来,分析回代过程求解的公式,容易看出,对上述任一种消元法,均有以下计算公式:

2.实验程序的设计

一、输入实验要求及初始条件;

二、计算系数矩阵A的条件数及方程组的理论解;

三、对各不同方法编程计算,并输出最终计算结果。

3.计算结果及分析

(1)

先计算系数矩阵的条件数,结果如下,可知系数矩阵的条件数较大,故此问题属于病态问题,b或A的扰动都可能引起解的较大误差;

采用顺序高斯消去法,计算结果为:

最终解为x=(1.***,1.***,1.***,1.***,0.***,1.***,0.***,1.***,0.***,1.***)T

使用无穷范数衡量误差,得到=2.842***1e-14,可以发现,采用顺序高斯消元法求得的解与精确解之间误差较小。通过进一步观察,可以发现,按照顺序高斯消去法计算时,其选取的主元值和矩阵中其他元素大小相近,因此顺序高斯消去法方式并没有对结果造成特别大的影响。

若采用列主元高斯消元法,则结果为:

最终解为x=(1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***)T

同样使用无穷范数衡量误差,有=0;

若使用完全主元高斯消元法,则结果为

最终解x=(1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***)T

同样使用无穷范数衡量误差,有=0;

(2)

若每步都选取模最小或尽可能小的元素为主元,则计算结果为

最终解x=(1.***

1.***

1.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***)T

使用无穷范数衡量误差,有为2.842***1e-14;而完全主元消去法的误差为=0。

从(1)和(2)的实验结果可以发现,列主元消去法和完全主元消去法都得到了精确解,而顺序高斯消去法和以模尽量小的元素为主元的消去法没有得到精确解。在后两种消去法中,由于程序计算时的舍入误差,对最终结果产生了一定的影响,但由于方程组的维度较低,并且元素之间相差不大,所以误差仍比较小。

为进一步分析,计算上述4种方法每步选取的主元数值,并列表进行比较,结果如下:

第n次消元

顺序

列主元

完全主元

模最小

6.***

6.***

4.***

4.***

4.***

4.***

4.***3333

4.***3333

4.***

4.***

4.***

4.***

4.0***063

4.0***063

4.***

4.***

4.0039***

4.0039***

4.***

0.0***469

0.0***469

4.***

从上表可以发现,对这个方程组而言,顺序高斯消去选取的主元恰好事模尽量小的元素,而由于列主元和完全主元选取的元素为8,与4在数量级上差别小,所以计算过程中的累积误差也较小,最终4种方法的输出结果均较为精确。

在这里,具体解释一下顺序法与模最小法的计算结果完全一致的原因。该矩阵在消元过程中,每次选取主元的一列只有两个非零元素,对角线上的元素为4左右,而其正下方的元素为8,该列其余位置的元素均为0。在这样的情况下,默认的主元也就是该列最小的主元,因此两种方法所得到的计算结果是一致的。

理论上说,完全高斯消去法的误差最小,其次是列主元高斯消去法,而选取模最小的元素作为主元时的误差最大,但是由于方程组的特殊性(元素相差不大并且维度不高),这个理论现象在这里并没有充分体现出来。

(3)

时,重复上述实验过程,各种方法的计算结果如下所示,在这里,仍采用无穷范数衡量绝对误差。

顺序高斯消去法

列主元高斯消去

完全主元高斯消去

选取模最小或尽可能小元素作为主元消去

X

1.***

1.***

1.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

1.***

1.***

1.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

2.***e-11

0

0

2.***e-11

可以看出,此时列主元和完全主元的计算结果仍为精确值,而顺序高斯消去和模尽可能小方法仍然产生了一定的误差,并且两者的误差一致。与n=10时候的误差比相比,n=20时的误差增长了大约1000倍,这是由于计算过程中舍入误差的不断累积所致。所以,如果进一步增加矩阵的维数,应该可以看出更明显的现象。

(4)

不同矩阵维度下的误差如下,在这里,为方便起见,选取2-条件数对不同维度的系数矩阵进行比较。

维度

条件数

顺序消去

列主元

完全主元

模尽量小

1.7e+3

2.84e-14

0

0

2.84e-14

1.8e+6

2.91e-11

0

0

2.91e-11

5.7e+7

9.31e-10

0

0

9.31e-10

1.8e+9

2.98e-08

0

0

2.98e-08

1.9e+12

3.05e-05

0

0

3.05e-05

3.8e+16

3.28e+04

3.88e-12

3.88e-12

3.28e+04

8.5e+16

3.52e+13

4.2e-3

4.2e-3

3.52e+13

从上表可以看出,随着维度的增加,不同方法对计算误差的影响逐渐体现,并且增长较快,这是由于舍入误差逐步累计而造成的。不过,方法二与方法三在维度小于40的情况下都得到了精确解,这两种方法的累计误差远比方法一和方法四慢;同样地,出于与前面相同的原因,方法一与方法四的计算结果保持一致,方法二与方法三的计算结果保持一致。

4.结论

本文矩阵中的元素差别不大,模最大和模最小的元素并没有数量级上的差异,因此,不同的主元选取方式对计算结果的影响在维度较低的情况下并不明显,四种方法都足够精确。

对比四种方法,可以发现采用列主元高斯消去或者完全主元高斯消去法,可以尽量抑制误差,算法最为精确。不过,对于低阶的矩阵来说,四种方法求解出来的结果误差均较小。

另外,由于完全选主元方法在选主元的过程中计算量较大,而且可以发现列主元法已经可以达到很高的精确程度,因而在实际计算中可以选用列主元法进行计算。

附录:程序代码

clear

clc;

format

long;

%方法选择

n=input('矩阵A阶数:n=');

disp('选取求解方式');

disp('1

顺序Gauss消元法,2

列主元Gauss消元法,3

完全选主元Gauss消元法,4

模最小或近可能小的元素作为主元');

a=input('求解方式序号:');

%赋值A和b

A=zeros(n,n);

b=zeros(n,1);

for

i=1:n

A(i,i)=6;

if

i>1

A(i,i-1)=8;

end

if

i

A(i,i+1)=1;

end

end

for

i=1:n

for

j=1:n

b(i)=b(i)+A(i,j);

end

end

disp('给定系数矩阵为:');

A

disp('右端向量为:');

b

%求条件数及理论解

disp('线性方程组的精确解:');

X=(A\b)'

fprintf('矩阵A的1-条件数:

%f

\n',cond(A,1));

fprintf('矩阵A的2-条件数:

%f

\n',cond(A));

fprintf('矩阵A的无穷-条件数:

%f

\n',cond(A,inf));

%顺序Gauss消元法

if

a==1

A1=A;b1=b;

for

k=1:n

if

A1(k,k)==0

disp('主元为零,顺序Gauss消元法无法进行');

break

end

fprintf('第%d次消元所选取的主元:%g\n',k,A1(k,k))

%disp('此次消元后系数矩阵为:');

%A1

for

p=k+1:n

l=A1(p,k)/A1(k,k);

A1(p,k:n)=A1(p,k:n)-l*A1(k,k:n);

b1(p)=b1(p)-l*b1(k);

end

end

x1(n)=b1(n)/A1(n,n);

for

k=n-1:-1:1

for

w=k+1:n

b1(k)=b1(k)-A1(k,w)*x1(w);

end

x1(k)=b1(k)/A1(k,k);

end

disp('顺序Gauss消元法解为:');

disp(x1);

disp('所求解与精确解之差的无穷-范数为');

norm(x1-X,inf)

end

%列主元Gauss消元法

if

a==2

A2=A;b2=b;

for

k=1:n

[max_i,max_j]=find(A2(:,k)==max(abs(A2(k:n,k))));

if

max_i~=k

A2_change=A2(k,:);

A2(k,:)=A2(max_i,:);

A2(max_i,:)=A2_change;

b2_change=b2(k);

b2(k)=b2(max_i);

b2(max_i)=b2_change;

end

if

A2(k,k)==0

disp('主元为零,列主元Gauss消元法无法进行');

break

end

fprintf('第%d次消元所选取的主元:%g\n',k,A2(k,k))

%disp('此次消元后系数矩阵为:');

%A2

for

p=k+1:n

l=A2(p,k)/A2(k,k);

A2(p,k:n)=A2(p,k:n)-l*A2(k,k:n);

b2(p)=b2(p)-l*b2(k);

end

end

x2(n)=b2(n)/A2(n,n);

for

k=n-1:-1:1

for

w=k+1:n

b2(k)=b2(k)-A2(k,w)*x2(w);

end

x2(k)=b2(k)/A2(k,k);

end

disp('列主元Gauss消元法解为:');

disp(x2);

disp('所求解与精确解之差的无穷-范数为');

norm(x2-X,inf)

end

%完全选主元Gauss消元法

if

a==3

A3=A;b3=b;

for

k=1:n

VV=eye(n);

[max_i,max_j]=find(A3(k:n,k:n)==max(max(abs(A3(k:n,k:n)))));

if

numel(max_i)==0

[max_i,max_j]=find(A3(k:n,k:n)==-max(max(abs(A3(k:n,k:n)))));

end

W=eye(n);

W(max_i(1)+k-1,max_i(1)+k-1)=0;

W(k,k)=0;

W(max_i(1)+k-1,k)=1;

W(k,max_i(1)+k-1)=1;

V=eye(n);

V(k,k)=0;

V(max_j(1)+k-1,max_j(1)+k-1)=0;

V(k,max_j(1)+k-1)=1;

V(max_j(1)+k-1,k)=1;

A3=W*A3*V;

b3=W*b3;

VV=VV*V;

if

A3(k,k)==0

disp('主元为零,完全选主元Gauss消元法无法进行');

break

end

fprintf('第%d次消元所选取的主元:%g\n',k,A3(k,k))

%disp('此次消元后系数矩阵为:');

%A3

for

p=k+1:n

l=A3(p,k)/A3(k,k);

A3(p,k:n)=A3(p,k:n)-l*A3(k,k:n);

b3(p)=b3(p)-l*b3(k);

end

end

x3(n)=b3(n)/A3(n,n);

for

k=n-1:-1:1

for

w=k+1:n

b3(k)=b3(k)-A3(k,w)*x3(w);

end

x3(k)=b3(k)/A3(k,k);

end

disp('完全选主元Gauss消元法解为:');

disp(x3);

disp('所求解与精确解之差的无穷-范数为');

norm(x3-X,inf)

end

%模最小或近可能小的元素作为主元

if

a==4

A4=A;b4=b;

for

k=1:n

AA=A4;

AA(AA==0)=NaN;

[min_i,j]=find(AA(k:n,k)==min(abs(AA(k:n,k))));

if

numel(min_i)==0

[min_i,j]=find(AA(k:n,k)==-min(abs(AA(k:n,k:n))));

end

W=eye(n);

W(min_i(1)+k-1,min_i(1)+k-1)=0;

W(k,k)=0;

W(min_i(1)+k-1,k)=1;

W(k,min_i(1)+k-1)=1;

A4=W*A4;

b4=W*b4;

if

A4(k,k)==0

disp('主元为零,模最小Gauss消元法无法进行');

break

end

fprintf('第%d次消元所选取的主元:%g\n',k,A4(k,k))

%A4

for

p=k+1:n

l=A4(p,k)/A4(k,k);

A4(p,k:n)=A4(p,k:n)-l*A4(k,k:n);

b4(p)=b4(p)-l*b4(k);

end

end

x4(n)=b4(n)/A4(n,n);

for

k=n-1:-1:1

for

w=k+1:n

b4(k)=b4(k)-A4(k,w)*x4(w);

end

x4(k)=b4(k)/A4(k,k);

end

disp('模最小Gauss消元法解为:');

disp(x4);

disp('所求解与精确解之差的无穷-范数为');

norm(x4-X,inf)

end

二、实验3.3

题目:

考虑方程组的解,其中系数矩阵H为Hilbert矩阵:

这是一个著名的病态问题。通过首先给定解(例如取为各个分量均为1)再计算出右端的办法给出确定的问题。

(1)选择问题的维数为6,分别用Gauss消去法(即LU分解)、J迭代法、GS迭代法和SOR迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何。

(2)逐步增大问题的维数,仍用上述的方法来解它们,计算的结果如何?计算的结果说明的什么?

(3)讨论病态问题求解的算法。

1.算法设计

对任意线性方程组,分析各种方法的计算公式如下,(1)Gauss消去法:

首先对系数矩阵进行LU分解,有,则原方程转化为,令,则原方程可以分为两步回代求解:

具体方法这里不再赘述。

(2)J迭代法:

首先分解,再构造迭代矩阵,其中,进行迭代计算,直到误差满足要求。

(3)GS迭代法:

首先分解,再构造迭代矩阵,其中,进行迭代计算,直到误差满足要求。

(4)SOR迭代法:

首先分解,再构造迭代矩阵,其中,进行迭代计算,直到误差满足要求。

2.实验过程

一、根据维度n确定矩阵H的各个元素和b的各个分量值;

二、选择计算方法(Gauss消去法,J迭代法,GS迭代法,SOR迭代法),对迭代法设定初值,此外SOR方法还需要设定松弛因子;

三、进行计算,直至满足误差要求(对迭代法,设定相邻两次迭代结果之差的无穷范数小于0.0001;

对SOR方法,设定为输出迭代100次之后的结果及误差值),输出实验结果。

3.计算结果及分析

(1)时,问题可以具体定义为

计算结果如下,Gauss消去法

第1次消元所选取的主元是:1

第2次消元所选取的主元是:0.0833333

第3次消元所选取的主元是:0.00555556

第4次消元所选取的主元是:0.000357143

第5次消元所选取的主元是:2.26757e-05

第6次消元所选取的主元是:1.43155e-06

解得X=(0.***

1.***

0.***

1.***

0.***

1.***)T

使用无穷范数衡量误差,可得=4.***e-10;

J迭代法

设定迭代初值为零,计算得到

J法的迭代矩阵B的谱半径为4.30853>1,所以J法不收敛;

GS迭代法

设定迭代初值为零,计算得到GS法的迭代矩阵G的谱半径为:0.999998<1,故GS法收敛,经过541次迭代计算后,结果为X=(1.001***6

0.***

0.***

1.***

1.***

0.***)T

使用无穷范数衡量误差,有=0.***;

SOR迭代法

设定迭代初值为零向量,并设定,计算得到SOR法迭代矩阵谱半径为0.***,经过100次迭代后的计算结果为

X=(1.***

0.***

1.03***59

1.06***81

1.***

0.9***527)T;

使用无穷范数衡量误差,有=0.***;

对SOR方法,可变,改变值,计算结果可以列表如下

迭代次数

迭代矩阵的谱半径

0.***

0.***

0.***

0.***

X

1.***

0.***

1.01***40

1.***

1.0***681

0.***

1.***

0.***

1.***

1.***

1.***

0.***

1.***

0.***

1.***

1.***

0.***

0.***

1.05***66

0.***

1.***

0.***

1.***

0.***

0.***

0.***

0.***

0.***

可以发现,松弛因子的取值对迭代速度造成了不同的影响,上述四种方法中,松弛因子=0.5时,收敛相对较快。

综上,四种算法的结果列表如下:

算法

Gauss消去法

Jacobi法

GS法

SOR法(取)

迭代次数

--

不收敛

541

迭代矩阵的谱半径

--

4.30853

0.999998

0.***

X

0.***

1.***

0.***

1.***

0.***

1.***

--

1.001***6

0.***

0.***

1.***

1.***

0.***

1.***

0.***

1.03***59

1.06***81

1.***

0.9***527

4.***e-10

--

0.***

0.***

计算可得,矩阵H的条件数为>>1,所以这是一个病态问题。由上表可以看出,四种方法的求解都存在一定的误差。下面分析误差的来源:

LU分解方法的误差存在主要是由于Hilbert矩阵各元素由分数形式转换为小数形式时,不能除尽情况下会出现舍入误差,在进行LU分解时也存在这个问题,所以最后得到的结果不是方程的精确解,但结果显示该方法的误差非常小;

Jacobi迭代矩阵的谱半径为4.30853,故此迭代法不收敛;

GS迭代法在迭代次数为541次时得到了方程的近似解,其误差约为0.05,比较大。GS迭代矩阵的谱半径为0.999998,很接近1,所以GS迭代法收敛速度较慢;

SOR迭代法在迭代次数为100次时误差约为0.08,误差较大。SOR迭代矩阵的谱半径为0.999999,也很接近1,所以时SOR迭代法收敛速度不是很快,但是相比于GS法,在迭代速度方面已经有了明显的提高;另外,对不同的,SOR方法的迭代速度会相应有变化,如果选用最佳松弛因子,可以实现更快的收敛;

(2)

考虑不同维度的情况,时,算法

Gauss消去

J法

GS法

SOR法(w=0.5)

计算结果

0.***

1.***

0.***

1.***

0.***

1.***

0.***

1.***

--

0.***

1.***

0.***

1.***

1.***

1.***

0.9968***

0.***

1.***

0.9397***

0.***

1.***

1.***

1.***

0.***

0.***

迭代次数

--

--

356

谱半径

--

6.04213

0.***

--

时,算法

Gauss消去法

Jacobi法

GS法

SOR法(w=0.5)

计算结果

0.***

1.***

0.***

1.000***1

0.***

1.***

0.***

1.***

0.***

1.***

0.***

--

0.***

1.***

0.***

0.***

0.***

1.02***91

1.***

1.***

1.***

0.***

0.947***7

1.0***572

0.***

0.***

0.***

1.***

1.***

1.***

1.***

0.***

0.***

0.***

迭代次数

--

--

1019

谱半径

--

8.64964

0.***

--

算法

Gauss消去法

Jacobi法

GS法

SOR法(w=0.5)

计算结果

0.***

1.***

0.***

0.***

1.***

0.***

2.***

-2.***

7.***

-7.***

7.***

-1.***

0.***

1.***

0.***

--

不收敛

1.***

1.***

0.907***9

0.***

0.***

1.***

1.09***64

1.***

1.***

1.***

1.0385***

0.***

0.942***3

0.***

0.***

迭代次数

--

--

262

谱半径

--

6.04213

>1

1.***

8.***

--

--

0.***

分析以上结果可以发现,随着n值的增加,Gauss消去法误差逐渐增大,而且误差增大的速度很快,在维数小于等于10情况下,Gauss消去法得到的结果误差较小;但当维数达到15时,计算结果误差已经达到精确解的很多倍;

J法迭代不收敛,无论n如何取值,其谱半径始终大于1,因而J法不收敛,所以J迭代法不能用于Hilbert矩阵的求解;

对于GS迭代法和SOR迭代法,两种方法均收敛,GS迭代法是SOR迭代法松弛因子取值为1的特例,SOR方法受到取值的影响,会有不同的收敛情况。可以得出GS迭代矩阵的谱半径小于1但是很接近1,收敛速度很慢。虽然随着维数的增大,所需迭代的次数逐渐减少,但是当维数达到15的时候,GS法已经不再收敛。因此可以得出结论,GS迭代方法在Hilbert矩阵维数较低时,能够在一定程度上满足迭代求解的需求,不过迭代的速度很慢。另外,随着矩阵维数的增加,SOR法的误差水平基本稳定,而且误差在可以接受的范围之内。

经过比较可以得出结论,如果求解较低维度的Hibert矩阵问题,Gauss消去法、GS迭代法和SOR迭代法均可使用,且Gauss消去法的结果精确度较高;如果需要求解较高维度的Hibert矩阵问题,只有采用SOR迭代法。

(3)

系数矩阵的条件数较大时,为病态方程。由实验可知,Gauss法在解上述方程时,结果存在很大的误差。而对于收敛的迭代法,可以通过选取最优松弛因子的方法来求解,虽然迭代次数相对较多,但是结果较为精确。

总体来看,对于一般病态方程组的求解,可以采用以下方式:

1.低维度下采用Gauss消去法直接求解是可行的;

Jacobi迭代方法不适宜于求解病态问题;

GS迭代方法可以解决维数较低的病态问题,但其谱半径非常趋近于1,导致迭代算法收敛速度很慢,维数较大的时候,GS法也不再收敛;

SOR方法较适合于求解病态问题,特别是矩阵维数较高的时候,其优势更为明显。

2.采用高精度的运算,如选用双倍或更多倍字长的运算,可以提高收敛速度;

3.可以对原方程组作某些预处理,从而有效降低系数矩阵的条件数。

4.实验结论

(1)对Hibert矩阵问题,其条件数会随着维度的增加迅速增加,病态性会越来越明显;在维度较低的时候,Gauss消去法、GS迭代法和SOR迭代法均可使用,且可以优先使用Gauss消去法;如果需要求解较高维度的Hibert矩阵问题,只有SOR迭代法能够求解。

(2)SOR方法比较适合于求解病态问题,特别是矩阵维数较高的时候,其优点更为明显。从本次实验可以看出,随着矩阵维数的增大,SOR方法所需的迭代次数减少,而且误差基本稳定,是解决病态问题的适宜方法。

附录:程序代码

clear

all

clc;

format

long;

%矩阵赋值

n=input('矩阵H的阶数:n=');

for

i=1:n

for

j=1:n

H(i,j)=1/(i+j-1);

end

end

b=H*ones(n,1);

disp('H矩阵为:');

H

disp('向量b:');

b

%方法选择

disp('选取求解方式');

disp('1

Gauss消去法,2

J迭代法,3

GS迭代法,4

SOR迭代法');

a=input('求解方式序号:');

%Gauss消去法

if

a==1;

H1=H;b1=b;

for

k=1:n

if

H1(k,k)==0

disp('主元为零,Gauss消去法无法进行');

break

end

fprintf('第%d次消元所选取的主元是:%g\n',k,H1(k,k))

for

p=k+1:n

m5=-H1(p,k)/H1(k,k);

H1(p,k:n)=H1(p,k:n)+m5*H1(k,k:n);

b1(p)=b1(p)+m5*b1(k);

end

end

x1(n)=b1(n)/H1(n,n);

for

k=n-1:-1:1

for

v=k+1:n

b1(k)=b1(k)-H1(k,v)*x1(v);

end

x1(k)=b1(k)/H1(k,k);

end

disp('Gauss消去法解为:');

disp(x1);

disp('解与精确解之差的无穷范数');

norm((x1-a),inf)

end

D=diag(diag(H));

L=-tril(H,-1);

U=-triu(H,1);

%J迭代法

if

a==2;

%给定初始x0

ini=input('初始值设定:x0=');

x0(:,1)=ini*diag(ones(n));

disp('初始解向量为:');

x0

xj(:,1)=x0(:,1);

B=(D^(-1))*(L+U);

f=(D^(-1))*b;

fprintf('(J法B矩阵谱半径为:%g\n',vrho(B));

if

vrho(B)<1;

for

m2=1:5000

xj(:,m2+1)=B*xj(:,m2)+fj;

if

norm((xj(:,m2+1)-xj(:,m2)),inf)<0.0001

break

end

end

disp('J法计算结果为:');

xj(:,m2+1)

disp('解与精确解之差的无穷范数');

norm((xj(:,m2+1)-diag(ones(n))),inf)

disp('J迭代法迭代次数:');

m2

else

disp('由于B矩阵谱半径大于1,因而J法不收敛');

end

end

%GS迭代法

if

a==3;

%给定初始x0

ini=input('初始值设定:x0=');

x0(:,1)=ini*diag(ones(n));

disp('初始解向量为:');

x0

xG(:,1)=x0(:,1);

G=inv(D-L)*U;

fG=inv(D-L)*b;

fprintf('GS法G矩阵谱半径为:%g\n',vrho(G));

if

vrho(G)<1

for

m3=1:5000

xG(:,m3+1)=G*xG(:,m3)+fG;

if

norm((xG(:,m3+1)-xG(:,m3)),inf)<0.0001

break;

end

end

disp('GS迭代法计算结果:');

xG(:,m3+1)

disp('解与精确解之差的无穷范数');

norm((xG(:,m3+1)-diag(ones(n))),inf)

disp('GS迭代法迭代次数:');

m3

else

disp('由于G矩阵谱半径大于1,因而GS法不收敛');

end

end

%SOR迭代法

if

a==4;

%给定初始x0

ini=input('初始值设定:x0=');

x0(:,1)=ini*diag(ones(n));

disp('初始解向量为:');

x0

A=H;

for

i=1:n

b(i)=sum(A(i,:));

end

x_star=ones(n,1);

format

long

w=input('松弛因子:w=');

Lw=inv(D-w*L)*((1-w)*D+w*U);

f=w*inv(D-w*L)*b;

disp('迭代矩阵的谱半径:')

p=vrho(Lw)

time_max=100;%迭代次数

x=zeros(n,1);%迭代初值

for

i=1:time_max

x=Lw*x+f;

end

disp('SOR迭代法得到的解为');

x

disp('解与精确解之差的无穷范数');

norm((x_star-x),inf)

end

pause

三、实验4.1

题目:

对牛顿法和拟牛顿法。进行非线性方程组的数值求解

(1)用上述两种方法,分别计算下面的两个例子。在达到精度相同的前提下,比较其迭代次数、CPU时间等。

(2)取其他初值,结果又如何?反复选取不同的初值,比较其结果。

(3)总结归纳你的实验结果,试说明各种方法适用的问题。

1.算法设计

对需要求解的非线性方程组而言,牛顿法和拟牛顿法的迭代公式如下,(1)牛顿法:

牛顿法为单步迭代法,需要取一个初值。

(2)拟牛顿法:(Broyden秩1法)

其中,拟牛顿法不需要求解的导数,因此节省了大量的运算时间,但需要给定矩阵的初值,取为。

2.实验过程

一、输入初值;

二、根据误差要求,按公式进行迭代计算;

三、输出数据;

3.计算结果及分析

(1)首先求解方程组(1),在这里,设定精度要求为,方法

牛顿法

拟牛顿法

初始值

计算结果X

x1

0.***

0.***

x2

1.***

1.0852***

x3

0.***

0.***

迭代次数

CPU计算时间/s

3.777815

2.739349

可以看出,在初始值相同情况下,牛顿法和拟牛顿法在达到同样计算精度情况下得到的结果基本相同,但牛顿法的迭代次数明显要少一些,但是,由于每次迭代都需要求解矩阵的逆,所以牛顿法每次迭代的CPU计算时间更长。

之后求解方程组(2),同样设定精度要求为

方法

牛顿法

拟牛顿法

初始值

计算结果X

x1

0.***

0.***

x2

0.***

0.***

x3

-0.***

-0.***

迭代次数

CPU计算时间/s

2.722437

3.920195

同样地,可以看出,在初始值相同情况下,牛顿法和拟牛顿法在达到同样计算精度情况下得到的结果是基本相同的,但牛顿法的迭代次数明显要少,但同样的,由于每次迭代中有求解矩阵的逆的运算,牛顿法每次迭代的CPU计算时间较长。

(2)对方程组(1),取其他初值,计算结果列表如下,同样设定精度要求为

初始值

方法

牛顿法

拟牛顿法

计算结果

0.***

1.***

0.***

9.21***94

-5.***

18.1***205

迭代次数

CPU计算时间/s

3.907164

4.818019

计算结果

0.***

1.***

0.***

9.21***91

-5.***

18.1***807

迭代次数

2735

CPU计算时间/s

8.127286

5.626023

计算结果

0.***

1.***

0.***

0.***

1.0852***

0.***

迭代次数

CPU计算时间/s

3.777815

2.739349

计算结果

0.***

1.***

0.***

0.***

1.***

0.***

迭代次数

188

CPU计算时间/s

3.835697

2.879070

计算结果

9.21***22

-5.***

18.1***605

Matlab警告矩阵接近奇异值,程序进入长期循环计算中

迭代次数

--

CPU计算时间/s

4.033868

--

计算结果

0.***

1.***

0.***

Matlab警告矩阵接近奇异值,程序进入长期循环计算中

迭代次数

--

CPU计算时间/s

12.243263

--

从上表可以发现,方程组(1)存在另一个在(9.2,-5.6,18.1)T附近的不动点,初值的选取会直接影响到牛顿法和拟牛顿法最后的收敛点。

总的来说,设定的初值离不动点越远,需要的迭代次数越多,因而初始值的选取非常重要,合适的初值可以更快地收敛,如果初始值偏离精确解较远,会出现迭代次数增加直至无法收敛的情况;

由于拟牛顿法是一种近似方法,拟牛顿法需要的的迭代次数明显更多,而且收敛情况不如牛顿法好(初值不够接近时,甚至会出现奇异矩阵的情况),但由于牛顿法的求解比较复杂,计算时间较长;

同样的,对方程组(2),取其他初值,计算结果列表如下,同样设定精度要求为

初始值

方法

牛顿法

拟牛顿法

计算结果

0.***

0.***

-0.***

0.***

0.***

-0.***

迭代次数

CPU计算时间/s

2.722437

3.920195

计算结果

0.***

0.***

-0.***

0.***

-0.***

76.***

迭代次数

CPU计算时间/s

5.047111

5.619752

计算结果

0.***

0.***

-0.***

1.0e+02

*

-0.***

-0.000***6

1.754***3

迭代次数

CPU计算时间/s

3.540668

3.387829

计算结果

0.***

0.***

-0.***

1.0e+04

*

0.***

-0.***

1.***

迭代次数

CPU计算时间/s

2.200571

2.640901

计算结果

0.***

0.***

-0.***

矩阵为奇异值,无法输出准确结果

迭代次数

--

CPU计算时间/s

1.719072

--

计算结果

0.***

0.***

-0.***

矩阵为奇异值,无法输出准确结果

迭代次数

149

--

CPU计算时间/s

2.797116

--

计算结果

矩阵为奇异值,无法输出准确结果

矩阵为奇异值,无法输出准确结果

迭代次数

--

--

CPU计算时间/s

--

--

在这里,与前文类似的发现不再赘述。

从这里看出,牛顿法可以在更大的区间上实现压缩映射原理,可以在更大的范围上选取初值并最终收敛到精确解附近;

在初始值较接近于不动点时,牛顿法和拟牛顿法计算所得到的结果是基本相同的,虽然迭代次数有所差别,但计算总的所需时间相近。

(3)

牛顿法在迭代过程中用到了矩阵的求逆,其迭代收敛的充分条件是迭代满足区间上的映内性,对于矩阵的求逆过程比较简单,所以在较大区间内满足映内性的问题适合应用牛顿法进行计算。一般而言,对于函数单调或者具有单值特性的函数适合应用牛顿法,其对初始值敏感程度较低,算法具有很好的收敛性。

另外,需要说明的是,每次计算给出的CPU时间与计算机当时的运行状态有关,同时,不同代码的运行时间也不一定一致,所以这个数据并不具有很大的参考价值。

4.实验结论

对牛顿法和拟牛顿法,都存在初始值越接近精确解,所需的迭代次数越小的现象;

在应用上,牛顿法和拟牛顿法各有优势。就迭代次数来说,牛顿法由于更加精确,所需的迭代次数更少;但就单次迭代来说,牛顿法由于计算步骤更多,且计算更加复杂,因而每次迭代所需的时间更长,而拟牛顿法由于采用了简化的近似公式,其每次迭代更加迅速。当非线性方程组求逆过程比较简单时,如方程组1的情况时,拟牛顿法不具有明显的优势;而当非线性方程组求逆过程比较复杂时,如方程组2的情况,拟牛顿法就可以体现出优势,虽然循环次数有所增加,但是CPU耗时反而更少。

另外,就方程组压缩映射区间来说,一般而言,对于在区间内函数呈现单调或者具有单值特性的函数适合应用牛顿法,其对初始值敏感程度较低,使算法具有很好的收敛性;而拟牛顿法由于不需要在迭代过程中对矩阵求逆,而是利用差商替代了对矩阵的求导,所以即使初始误差较大时,其倒数矩阵与差商偏差也较小,所以对初始值的敏感程度较小。

附录:程序代码

%方程1,牛顿法

tic;

format

long;

%%初值

disp('请输入初值');

a=input('第1个分量为:');

b=input('第2个分量为:');

c=input('第3个分量为:');

disp('所选定初值为');

x=[a;b;c]

%%误差要求

E=0.0001;

%%迭代

i=0;

e=2*E;

while

e>E

F=[12*x(1)-x(2)^2-4*x(3)-7;x(1)^2+10*x(2)-x(3)-11;x(2)^3+10*x(3)-8];

f=[12,-2*x(2),-4;2*x(1),10,-1;0,3*x(2)^2,10];

det_x=((f)^(-1))*(-F);

x=x+det_x;

e=max(norm(det_x));

i=i+1;

end

disp('迭代次数');

i

disp('迭代次数');

x

toc;

%方程1,拟牛顿法

tic;

format

long;

%%初值

%%初值

disp('请输入初值');

a=input('第1个分量为:');

b=input('第2个分量为:');

c=input('第3个分量为:');

disp('所选定初值为');

x0=[a;b;c]

%%误差要求

E=0.0001;

%%迭代

i=0;

e=2*E;

A0=eye(3);

while

e>E

F0=[12*x0(1)-x0(2)^2-4*x0(3)-7;x0(1)^2+10*x0(2)-x0(3)-11;x0(2)^3+10*x0(3)-8];

x1=x0-A0^(-1)*F0;

s=x1-x0;

F1=[12*x1(1)-x1(2)^2-4*x1(3)-7;x1(1)^2+10*x1(2)-x1(3)-11;x1(2)^3+10*x1(3)-8];

y=F1-F0;

A1=A0+(y-A0*s)*s'/(s'*s);

x0=x1;

A0=A1;

e=max(norm(s));

i=i+1;

end

disp('迭代次数');

i

disp('迭代次数');

x0

toc;

%方程2,牛顿法

tic;

format

long;

%%初值

disp('请输入初值');

a=input('第1个分量为:');

b=input('第2个分量为:');

c=input('第3个分量为:');

disp('所选定初值为');

x=[a;b;c]

%%误差要求

E=0.0001;

%%迭代

i=0;

e=2*E;

while

e>E

F=[3*x(1)-cos(x(2)*x(3))-0.5;x(1)^2-81*(x(2)+0.1)^2+sin(x(3))+1.06;exp(1)^(-x(1)*x(2))+20*x(3)+(10*pi-3)/3];

f=[3,x(3)*sin(x(2)*x(3)),x(2)*sin(x(2)*x(3));2*x(1),-162*x(2)-81/5,cos(x(3));-x(2)*exp(1)^(-x(1)*x(2)),-x(1)*exp(1)^(-x(1)*x(2)),20];

det_x=((f)^(-1))*(-F);

x=x+det_x;

e=max(norm(det_x));

i=i+1;

end

disp('迭代次数');

i

disp('迭代次数');

x

toc;

%方程2,拟牛顿法

tic;

format

long;

%%初值

%%初值

disp('请输入初值');

a=input('第1个分量为:');

b=input('第2个分量为:');

c=input('第3个分量为:');

disp('所选定初值为');

x0=[a;b;c]

%%误差要求

E=0.0001;

%%迭代

i=0;

e=2*E;

A0=eye(3);

while

e>E

F0=[3*x0(1)-cos(x0(2)*x0(3))-0.5;x0(1)^2-81*(x0(2)+0.1)^2+sin(x0(3))+1.06;exp(1)^(-x0(1)*x0(2))+20*x0(3)+(10*pi-3)/3];

x1=x0-A0^(-1)*F0;

s=x1-x0;

F1=[3*x1(1)-cos(x1(2)*x1(3))-0.5;x1(1)^2-81*(x1(2)+0.1)^2+sin(x1(3))+1.06;exp(1)^(-x1(1)*x1(2))+20*x1(3)+(10*pi-3)/3];

y=F1-F0;

A1=A0+(y-A0*s)*s'/(s'*s);

x0=x1;

A0=A1;

e=max(norm(s));

i=i+1;

end

disp('迭代次数');

i

disp('迭代次数');

x0

toc;

第四篇:实验四、RBF神经网络实验报告

实验

四、RBF神经网络

一、实验目的

通过计算机编程实现并验证RBF神经网络的曲线拟合及模式分类能力。

二、实验内容

1)用Matlab实现RBF神经网络,并对给定的曲线样本集实现拟合; 2)通过改变实验参数,观察和分析影响RBF神经网络的结果与收敛速度的因素;

三、实验原理、方法和手段

RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近、时间序列分析、数据分类、模式识别、信息处理、图像处理、系统建模、控制和故障诊断等。

简单说明一下为什么RBF网络学习收敛得比较快。当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼近网络。由于对于每次输入,网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢。BP网络就是一个典型的例子。

如果对于输入空间的某个局部区域只有少数几个连接权值影响输出,则该网络称为局部逼近网络。常见的局部逼近网络有RBF网络、小脑模型(CMAC)网络、B样条网络等。

径向基函数解决插值问题

完全内插法要求插值函数经过每个样本点,即有P个。

RBF的方法是要选择P个基函数,每个基函数对应一个训练数据,各基函数形式为,由于距离是径向同性的,因此称为径向基函数。

。样本点总共||X-Xp||表示差向量的模,或者叫2范数。

基于为径向基函数的插值函数为:

输入X是个m维的向量,样本容量为P,P>m。可以看到输入数据点Xp是径向基函数φp的中心。

隐藏层的作用是把向量从低维m映射到高维P,低维线性不可分的情况到高维就线性可分了。

将插值条件代入:

写成向量的形式为维度无关,当Φ可逆时,有,显然Φ是个规模这P对称矩阵,且与X的。

对于一大类函数,当输入的X各不相同时,Φ就是可逆的。下面的几个函数就属于这“一大类”函数:

1)Gauss(高斯)函数

2)Reflected Sigmoidal(反常S型)函数

3)Inverse multiquadrics(拟多二次)函数

σ称为径向基函数的扩展常数,它反应了函数图像的宽度,σ越小,宽度越窄,函数越具有选择性。

完全内插存在一些问题:

1)插值曲面必须经过所有样本点,当样本中包含噪声时,神经网络将拟合出一个错误的曲面,从而使泛化能力下降。

由于输入样本中包含噪声,所以我们可以设计隐藏层大小为K,K

2)基函数个数等于训练样本数目,当训练样本数远远大于物理过程中固有的自由度时,问题就称为超定的,插值矩阵求逆时可能导致不稳定。

拟合函数F的重建问题满足以下3个条件时,称问题为适定的: 解的存在性 解的唯一性 解的连续性

不适定问题大量存在,为解决这个问题,就引入了正则化理论。正则化理论

正则化的基本思想是通过加入一个含有解的先验知识的约束来控制映射函数的光滑性,这样相似的输入就对应着相似的输出。

寻找逼近函数F(x)通过最小化下面的目标函数来实现:

加式的第一项好理解,这是均方误差,寻找最优的逼近函数,自然要使均方误差最小。第二项是用来控制逼近函数光滑程度的,称为正则化项,λ

是正则化参数,D是一个线性微分算子,代表了对F(x)的先验知识。曲率过大(光滑度过低)的F(x)通常具有较大的||DF||值,因此将受到较大的惩罚。

直接给出(1)式的解:

权向量

(2)G(X,Xp)称为Green函数,G称为Green矩阵。Green函数与算子D的形式有关,当D具有旋转不变性和平移不变性时,类Green函数的一个重要例子是多元Gauss函数:

。这

正则化RBF网络

输入样本有P个时,隐藏层神经元数目为P,且第p个神经元采用的变换函数为G(X,Xp),它们相同的扩展常数σ。输出层神经元直接把净输入作为输出。输入层到隐藏层的权值全设为1,隐藏层到输出层的权值是需要训练得到的:逐一输入所有的样本,计算隐藏层上所有的Green函数,根据(2)式计算权值。广义RBF网络

Cover定理指出:将复杂的模式分类问题非线性地映射到高维空间将比投影到低维空间更可能线性可分。

广义RBF网络:从输入层到隐藏层相当于是把低维空间的数据映射到高维空间,输入层细胞个数为样本的维度,所以隐藏层细胞个数一定要比输入层细胞个数多。从隐藏层到输出层是对高维空间的数据进行线性分类的过程,可以采用单层感知器常用的那些学习规则,参见神经网络基础和感知器。

注意广义RBF网络只要求隐藏层神经元个数大于输入层神经元个数,并没有要求等于输入样本个数,实际上它比样本数目要少得多。因为在标准RBF网络中,当样本数目很大时,就需要很多基函数,权值矩阵就会很大,计算复杂且容易产生病态问题。另外广RBF网与传统RBF网相比,还有以下不同:

径向基函数的中心不再限制在输入数据点上,而由训练算法确定。各径向基函数的扩展常数不再统一,而由训练算法确定。

输出函数的线性变换中包含阈值参数,用于补偿基函数在样本集上的平均值与目标值之间的差别。

因此广义RBF网络的设计包括: 结构设计--隐藏层含有几个节点合适

参数设计--各基函数的数据中心及扩展常数、输出节点的权值。下面给出计算数据中心的两种方法:

数据中心从样本中选取。样本密集的地方多采集一些。各基函数采用统一的偏扩展常数:

dmax是所选数据中心之间的最大距离,M是数据中心的个数。扩展常数这么计算是为了避免径向基函数太尖或太平。

自组织选择法,比如对样本进行聚类、梯度训练法、资源分配网络等。各聚类中心确定以后,根据各中心之间的距离确定对应径向基函数的扩展常数。

λ是重叠系数。

接下来求权值W时就不能再用行数大于列数,此时可以求Φ伪逆。

了,因为对于广义RBF网络,其

数据中心的监督学习算法

最一般的情况,RBF函数中心、扩展常数、输出权值都应该采用监督学习算法进行训练,经历一个误差修正学习的过程,与BP网络的学习原理一样。同样采用梯度下降法,定义目标函数为

ei为输入第i个样本时的误差信号。

上式的输出函数中忽略了阈值。

为使目标函数最小化,各参数的修正量应与其负梯度成正比,即

具体计算式为

上述目标函数是所有训练样本引起的误差总和,导出的参数修正公式是一种批处理式调整,即所有样本输入一轮后调整一次。目标函数也可以为瞬时值形式,即当前输入引起的误差

此时参数的修正值为:

四、实验结果

RBF神经网络函数用于线性回归,用exp(PI*0.1)作为训练数据,然后输入的测试数是exp(PI*0.1),其实际的输出结果与预测的输出结果完全一致,预测效果很好,其图如下图所示。

RBF神经网络函数用于分类,其实际的输出结果与预测的输出结果如下图所示。

第五篇:实验四 存储器部件实验报告

实验四 存储器部件实验

班级:通信111班 学号:201110324119 姓名:邵怀慷 成绩:

一、实验目的

1、熟悉ROM芯片和RAM芯片在功能和使用方法等方面的相同和差异之处;学习用编程器设备向EEPROM芯片内写入一批数据的过程和方法。

2、理解并熟悉通过字、位扩展技术实现扩展存储器系统容量的方案。

3、了解静态存储器系统使用的各种控制信号之间正常的时序关系。

4、了解如何通过读、写存储器的指令实现对58C65 ROM芯片的读、写操作。

5、加深理解存储器部件在计算机整机系统中的作用。

二、实验内容

1、要完成存储器容量扩展的教学实验,需为扩展存储器选择一个地址,并注意读写和OE等控制信号的正确状态。

2、用监控程序的D、E命令对存储器进行读写,比较RAM(6116)、EEPROM(28系列芯片)、EPROM(27系列芯片)在读写上的异同。

3、用监控程序的A命令编写一段程序,对RAM(6116)进行读写,用D命令查看结果是否正确。

4、用监控程序的A命令编写一段程序,对扩展存储器EEPROM(28 系列芯片)进行读写,用D命令查看结果是否正确;如不正确,分析原因,改写程序,重新运行。

三、实验步骤

1、检查扩展芯片插座的下方的插针要按下列要求短接:标有“/MWR”“RD”的插针左边两个短接,标有“/MRD”“GND”的插针右边两个短接。

2、RAM(6116)支持即时读写,可直接用A、E 命令向扩展的存储器输入程序或改变内存单元的值。

(1)用E命令改变内存单元的值并用D命令观察结果。

1)在命令行提示符状态下输入:

E 2020↙

屏幕将显示: 2020 内存单元原值:

按如下形式键入:

2020 原值:2222(空格)原值:3333(空格)原值:4444(空格)原值:5555 ↙(1)结果

2)在命令行提示符状态下输入:

D 2020↙

屏幕将显示从2020内存单元开始的值,其中2020H~2023H的值为:

2222 3333 4444 5555

问题:断电后重新启动教学实验机,用D命令观察内存单元2020~2023 的值。会发现

什么问题,为什么?

答:断电结果:

断电后重新启动教学实验机,用D命令观察内存单位2020~2023的值。会发现原来置入到这几个内存单位的值已经改变,用户在使用RAM时,必须每次断电重启后豆芽平重新输入程序或修改内存单位的值。(2)用A 命令输入一段程序,执行并观察结果。

在命令行提示符状态下输入:

A 2000↙

屏幕将显示: 2000:

按如下形式键入:

2000: MVRD R0,AAAA

MVRD R1,5555

AND R0,R1

RET

问题:采用单步和连续两种方式执行这段程序,察看结果,断电后发生什么情况? 答:输出结果

分析:从采用但不和连续两种方式执行这段程序,察看结果,断电后发生什么情况R1的数据改变了。

3、将扩展的ROM芯片(27或28系列或28的替代产品58C65芯片)插入标有“EXTROMH”和“EXTROML”的自锁紧插座,要注意芯片插入的方向,带有半圆形缺口的一方朝左插入。如果芯片插入方向不对,会导致芯片烧毁。然后锁紧插座。

4、将扩展的ROM 芯片(27或28系列或28的替代产品58C65芯片)插入标有“EXTROMH”和“EXTROML”的插座,要注意芯片插入的方向,带有半圆形缺口的一方朝左插入。如果芯 片插入方向不对,会导致芯片烧毁。然后锁紧插座。

5、将扩展芯片下方的插针按下列方式短接:将标有“/MWR”“ PGM”和“RD”的三个插针左面两个短接,将标有“/MWR”“/OE”“GND”的三个插针左边两个短接。

6、将扩展芯片上方标有EXTROMH和EXTROML的“/CS”信号用自锁紧线短接,然后短接到MEMDC 138 芯片的上方的标有“4000-5fff”地址单元。

注意:标有/CS 的圆孔针与标有MEM/CS 的一排圆孔针中的任意一个都可以用导线相连;连接的地址范围是多少,用户可用的地址空间就是多少。

下面以2764A 为例,进行扩展EPROM 实验。

7、EPROM 是紫外线可擦除的电可改写的只读存储器芯片。在对EPROM 进行重写前必须先擦除并判断芯片是否为空,再通过编程器进行编程。

(1)将芯片0000~001F 的内存单元的值置成01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F(2)将编程好的芯片插在扩展芯片的高位,低位不插,按上面的提示插好插针。问题:

(1)用D命令查看内存单元0000~001F的值,结果是什么?

(2)用E命令向芯片的内存单元置入数值,再用D命令察看,原来的值是否发生改变?(3)用A命令向芯片所在的地址键入程序,用U命令反汇编,发现什么?为什么会出现这种

情况?

(4)将教学机断电后重启,用D命令看内存单元0000~001F的内容,数值是否发生变化? 下面以AT28C64B(或其替代产品58C65 芯片)为例,进行扩展EEPROM实验。

8、AT28C64B的读操作和一般的RAM一样,而其写操作,需要一定的时间,大约为1 毫秒。因此,需要编写一延迟子程序,在对EEPROM进行写操作时,调用该子程序,以完成正确的读写。(1)用E 命令改变内存单元的值并用D命令观察结果。1)在命令行提示符状态下输入: E 5000↙

屏幕将显示: 5000 内存单元原值: 按如下形式键入:

5000 原值:2424(按空格)原值:3636(按空格)原值:4848(按空格)原值:5050↙ 2)在命令行提示符状态下输入: D 5000↙

屏幕将显示5000H~507FH 内存单元的值,从5000 开始的连续四个内存单元的值依次 为2424 3636 4848 5050。

3)断电后重新启动,用D命令察看内存单元5000~5003的值,会发现这几个单元的值没有发生改变,说明EEPROM的内容断电后可保存。输出结果:

分析:从输出的结果来看断电后重新启动,用D命令察看内存单位500~5003的值,会发现这几个单位的值没有发生改变,说明EEPROM的内容断电后可保存。

(2)AT28C64B存储器不能直接用A 命令输入程序,单字节的指令可能会写进去,双字节指令的低位会出错(建议试一试),可将编写好的程序用编程器写入片内;也可将程序放到RAM(6116)中,调用延时子程序,访问AT28C64B 中的内存地址。

下面给出的程序,在5000H~500FH 单元中依次写入数据0000H、0001H、...000FH。从2000H单元开始输入主程序:(2000)MVRD R0,0000 MVRD R2,0010 ;R2记录循环次数

MVRD R3,5000 ;R3的内容为16 位内存地址

(2006)STRR [R3],R0 ;将R0寄存器的内容放到R3 给出的内存单元中

CALA 2200 ;调用程序地址为2200的延时子程序 INC R0 ;R0加1 INC R3 ;R3加1 DEC R2 ;R2减1 JRNZ 2006 ;R2不为0跳转到2006H RET 从2200H 单元开始输入延时子程序:(2200)PUSH R3 MVRD R3,FFFF(2203)DEC R3 JRNZ 2203 POP R3 RET 运行主程序,在命令提示符下输入:G 2000↙。输出结果:

注意:运行G命令的时候,必须要将将标有“/MWR”“/OE”“GND”的三个插针右边两个短接。程序执行结束后,在命令提示符下输入:D 5000↙; 可看到从5000H开始的内存单元的值变为 5000:0000 0001 0002 0003 0004 0005 0006 0007 5008:0008 0009 000A 000B 000C 000D 000E 000F。

四、思考题

1)为何能用E 命令直接写AT28C64B的存储单元,而A命令则有时不正确;

答:E命令是储存寄存器指令A时监控器指令,而E直接多个程序写入AT28C64B的存储单元,写入的速度快,A命令只能是一次写入执行一条程序,是延迟指令、所以用E命令直接写A。T28C64B的存储单元,而A命令则有时不正确。

2)修改延时子程序,将其延时改短,可将延时子程序中R3的内容赋成00FF或0FFF等,再看运行结果。

五、实验心得与体会

通过本次试验的难度在于怎样弄清楚ROM芯片和RAM芯片在功能和使用方法等方面的同和差异之处:学习编程器设备向EEPROM芯片内写入一批数据的过程跟方法的工作原理,我在我预习做试验的时候,阅读到计算机存储器系统由ROM和RAM两个存储区组成,分别由EPROM芯片(或EEPROM芯片)和RAM芯片构成。TEC-XP教学极端及中还了另外几个存储器器件插座,可以插上相应储存器芯片成存储器容量扩展的教学实验,为此必须比较清楚的了解:是我们做实验的一大难点,同时也是我们计算机组成原理 的重点。同时在做实验的时候也遇到一些相应的疑问,RAM和EPROM、EEPROM存储器芯片在读写控制跟写入时间等方面的同异之处,并正确建立连接关系和在过程中完成正确的读写过程。

下载实验四数值微积分实验报告[大全五篇]word格式文档
下载实验四数值微积分实验报告[大全五篇].doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    数值分析实验报告写作范本

    学号: 姓名: 实验二插值法 实验2.1(多项式插值的振荡现象) 问题提出:考虑一个固定的区间上用插值逼近一个函数。显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。 我们......

    实验四工业工程实验报告2011

    实验四自动化立体仓库作业 一、实验目的 了解自动化立体仓库的入库、移库、出库作业和电子标签货架系统;根据产品生产线规划设计AGV小车的运行轨迹。 二、实验内容 结合减速......

    嵌入式实验四实验报告(共五则范文)

    专业:自动化1402 日期:2016.11.01 地点:教2-104 成绩:________________ 实验报告 同组学生姓名:施兴棋学号:3140103039 同组学生姓名:______________________________学号:_________......

    计算机网络实验报告-实验四(写写帮整理)

    实验四 用户数据报协议(UDP ) 3F 一、 实验目的 1.掌握UDP协议的报文格式 2.掌握UDP协议校验和的计算方法 3.理解UDP协议的优缺点 4.理解协议栈对UDP协议的处理方法 5.理解UD......

    实验动物学实验报告

    实验动物学实验报告 一、实验动物:小鼠 二、操作流程:抓取,固定,编号,给药,取血,麻醉,绝育,解剖。 三、具体操作 1、抓取:抓取小鼠时,右手抓住小鼠尾巴,不要过于用力,以免惊吓小鼠。左手......

    趣味实验实验报告

    趣味实验 实验员:张燕年级、班级:09级化学三班学号:40907147 联系方式:*** 一、实验目的: 激发学生学习化学的兴趣,通过化学实验的趣味化活动,使学生的思维更加活跃,手脑并......

    实验一 实验报告

    网 络 程 序 设 实验报告 实验名称:Winsock编程接口实验 实验类型: 验 证 型 计 一、实验目的  掌握Winsock的启动和初始化;  掌握gethostname(),gethostbyname(),GetAdapters......

    交换机实验 实验报告

    交换机实验II 实验目的 1. 理解掌握环路对网络造成的影响,掌握环路的自检测的配置; 2. 理解路由的原理,掌握三层交换设备路由的配置方法 3. 掌握DHCP的原理以及其配置方法 实验......