《计算方法学习指导》实验(1)

第1章 数值计算中的误差

1.1 实验目的

​ 了解MATLAB基本操作、数值计算中误差的传递,避免误差的方法。

1.2 MATLAB基本操作

矩阵运算

%%行向量
>> x=[-3 1 7]  %也可用逗号分隔

x =

    -3     1     7
%%列向量
>> y=[0 2 9]' %行向量转置

y =

     0
     2
     9
%%矩阵
>> A=[1 2 3;4 5 6;7 8 9]%分号换行

A =

     1     2     3
     4     5     6
     7     8     9
%%矩阵转置
>> B=A'

B =

     1     4     7
     2     5     8
     3     6     9
%%矩阵加减法运算
>> C=A+B

C =

     2     6    10
     6    10    14
    10    14    18
>> C=A-1

C =

     0     1     2
     3     4     5
     6     7     8
%%矩阵乘法运算
>> C=C*2

C =

     0     2     4
     6     8    10
    12    14    16
>> C=A*C

C =

    48    60    72
   102   132   162
   156   204   252
%%逆
>> A=[1 2;3 5];
>> inv(A)

ans =

   -5.0000    2.0000
    3.0000   -1.0000
%%矩阵除法运算
>> A=[1 2 3;4 5 6;7 8 0];
>> b=[1 1 1]';
>> x=A\b	%左除

x =

   -1.0000
    1.0000
   -0.0000

​ 此处矩阵的除法运算相当于下面方程组的解:
A x = b Ax=b Ax=b
​ 即:
x = A − 1 b x=A^{-1}b x=A1b

数组运算

​ 数组的运算符号是点运算,即 .* ./ 或 .\ 还有 .^ 。(加减运算无点运算)

​ 左除和右除的区别在于交换了被除数和除数。

%%数组输入
>> a=0:2:10

a =

     0     2     4     6     8    10
>> a=linspace(0,10,6)	%构造一维等差数组

a =

     0     2     4     6     8    10
%%数组加减法与矩阵加减法运算相同
%%数组乘法
>> a=0:2:10

a =

     0     2     4     6     8    10
>> b=0:2:10

b =

     0     2     4     6     8    10

>> c=a.*b

c =

     0     4    16    36    64   100
%%数组除法
>> a./b

ans =

   NaN     1     1     1     1     1
%%数组乘幂
>> c=a.^2

c =

     0     4    16    36    64   100

逻辑运算

​ 与:&,或:|,非:~。

>> a=[-1 2 4;5 4 -8];
>> b=[-2 1 -1;3 -1 2];
>> c=(a>0)&(b>0)

c =

  2×3 logical array

   0   1   0
   1   0   0

>> d=(a>0)|(b>0)

d =

  2×3 logical array

   0   1   1
   1   1   1

>> e=~(a>0)

e =

  2×3 logical array

   1   0   0
   0   0   1

基本函数

基本初等函数

sin(x)	%正弦
cos(x)	%余弦
tan(x)	%正切
asin(x)	%反正弦
exp(x)	%e的指数
log(x)	%自然对数
sqrt(x)	%平方根
abs(x)	%绝对值

与矩阵有关的常用函数

​ 二范数:二范数指矩阵A的2范数,就是A的转置共轭矩阵与矩阵A的积的最大特征根的平方根值,是指空间上两个向量矩阵的直线距离。类似于求棋盘上两点间的直线距离。

​ 条件数:数值分析中,一个问题的条件数是该数量在数值计算中的容易程度的衡量,也就是该问题的适定性。一个低条件数的问题称为良态的,而高条件数的问题称为病态(或者说非良态)的。条件数是线性方程组Ax=b的解对b中的误差或不确定度的敏感性的度量。数学定义为矩阵A的条件数等于A的范数与A的逆的范数的乘积,即cond(A)=‖A‖·‖A的逆‖,对应矩阵的3种范数,相应地可以定义3种条件数。

>> A=[1 -2;-3 4];
>> norm(A)	%求二范数

ans =

    5.4650

>> cond(A)	%求条件数

ans =

   14.9330
   

>> rank(A)	%求矩阵的秩

ans =

     2


>> zeros(2,3)	%生成一个2行3列的零矩阵

ans =

     0     0     0
     0     0     0

>> ones(2,3)	%生成一个2行3列元素为1的矩阵

ans =

     1     1     1
     1     1     1
     

>> eye(3)	%生成3阶单位阵

ans =

     1     0     0
     0     1     0
     0     0     1     

>> length(A)	%求向量长度维数(列数)

ans =

     2

控制流语句

for循环语句

for 循环变量 = 初值:增量:终值		%增量缺省值为1
	语句
	end

while循环语句

while 条件	%条件成立时执行下面语句,否则跳过
	语句
end

if条件语句(三种形式)

if 条件
	语句
end

if 条件
	语句1
else
	语句2
end

if 条件1
	语句1
else if 条件2
	语句2
else
	语句3
end

M文件

命令文件

​ 假设有一个tset.m文件如下:

n=6;
pp=1;
for i=1:n
	pp=pp*i;
end

​ 在命令输入窗口执行以下操作会出现相应结果:

>>test
>>pp
pp = 
	720

函数文件

function 因变量 = 函数(自变量)
%说明语句
语句

%计算n!的M文件
function tt = prod(n)
tt = 1;
for i = 1:n
	tt = tt*i;
end

简单绘图

画函数曲线以及散点图

​ 命令格式:plot(x,y,‘s’)

​ x代表横坐标,y代表纵坐标,s是可选择参数(默认为蓝色实线),具体意义如下:

在这里插入图片描述

例1:画出正余弦曲线

>> title('sin(x)&cos(x)')	%图形标题
>> t=0:0.01:2*pi;	%变量范围
>> plot(t,sin(t),'K',t,cos(t),'R')	
>> xlabel('x');ylabel('y');	%坐标轴题注

​ 结果如下:

在这里插入图片描述

例2:画出y=x^2 (0 <= x <= 1)的散点图

>> x=0:0.1:1;
>> y=x.^2;
>> plot(x,y,'.');
>> xlabel('x');ylabel('y');

​ 结果如下:

在这里插入图片描述

例3:在区域[-pi,pi]×[-pi,pi]上画以下函数的网格曲面。
z = s i n x c o s y z=sinxcosy z=sinxcosy

>> x=-pi:0.3:pi;y=-pi:0.3:pi;
>> [X,Y]=meshgrid(x,y);Z=sin(X).*cos(Y);
>> mesh(X,Y,Z);xlabel('x');ylabel('y');zlabel('z');

结果如下:

在这里插入图片描述

1.3 实验1例题:数值计算中的误差分析

例1:防止大数吃小数。设a=1×10308,b=1.1×10308,c=-1.001×10^308,用MATLAB计算a+(b+c),(a+b)+c。

>> a=1e+308;b=1.1e+308;c=-1.001e+308;
>> r1=(a+b)+c

r1 =

   Inf

>> r2=a+(b+c)

r2 =

  1.0990e+308

​ 在MATLAB中能表示的最大的正实数是realmax,即1.7977e+308。凡是比这个数大的数,MATLAB就用Inf表示(正无穷)。这个题中就是因为这个原因使得结合律不成立。

例2:分析下面程序,循环语句是否会结束?

a=2;
b=2;
while a+b~=a
	b=b/2;
end

​ 按理来说这个程序不会结束,因为b永远不可能为0。但是实际上这个程序很快就会结束,返回b的值为b=2.2204e-016,说明a远大于b的值时,b的值就会被忽略,这时a+b=a,程序结束。

例3:举例说明太小的数不能做除数。

​ 计算以下表达式:
( 2 + x ) − 2 x \frac{(2+x)-2}{x} x(2+x)2

>> x=3;y=((2+x)-2)/x

y =

     1

>> x=1e-12;y=((2+x)-2)/x

y =

    1.0001

>> x=1e-16;y=((2+x)-2)/x

y =

     0

​ 该表达式只要x不为零结果就一定等于1。当x越小的时候可以发现结果和1的偏差越大,所以太小的数不宜做除数。

分析下面程序,循环语句是否会结束?

a=2;
b=2;
while a+b~=a
	b=b/2;
end

​ 按理来说这个程序不会结束,因为b永远不可能为0。但是实际上这个程序很快就会结束,返回b的值为b=2.2204e-016,说明a远大于b的值时,b的值就会被忽略,这时a+b=a,程序结束。

例3:举例说明太小的数不能做除数。

​ 计算以下表达式:
( 2 + x ) − 2 x \frac{(2+x)-2}{x} x(2+x)2

>> x=3;y=((2+x)-2)/x

y =

     1

>> x=1e-12;y=((2+x)-2)/x

y =

    1.0001

>> x=1e-16;y=((2+x)-2)/x

y =

     0

​ 该表达式只要x不为零结果就一定等于1。当x越小的时候可以发现结果和1的偏差越大,所以太小的数不宜做除数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《谭志虎 计算机组成原理实验指导与习题解析》是一本介绍计算机组成原理实验的书籍。书中详细介绍了计算机的各个部分的工作原理和实验过程,并且提供了丰富的习题解析。这本书对于学习计算机组成原理的学生来说是一本非常有用的指导书,可以帮助他们更好地理解计算机的原理和实现。 本书共分为四个部分,分别是计算机组成原理基础、微操作与总线、存储器、和I/O与异常处理。针对每个部分,书中都提供了详细的实验指导,帮助读者通过实验来理解计算机组成原理的知识。每个实验都配有实验步骤、实验目的、实验原理以及实验注意事项,让读者能够轻松地完成实验。 除了实验指导外,本书还提供了大量的习题,涵盖了每个部分的重点知识点。习题的答案和解析也都详细给出,方便读者自学和自测。通过刷完这些习题,读者可以进一步加深对计算机组成原理的理解,掌握更多的知识和技能。 总之,《谭志虎 计算机组成原理实验指导与习题解析》是一本非常实用的计算机组成原理教材,适合广大计算机专业的学生、工程师和其他相关人员使用。本书的指导和习题解析,可以让读者更全面地了解计算机的组成原理和工作原理,为他们的学习和工作提供很大的帮助。 ### 回答2: 《谭志虎计算机组成原理实验指导与习题解析PDF》是一本计算机组成原理的实验指导书籍。书中详细介绍了计算机组成原理的相关概念和实验操作步骤,同时提供了解析详尽的习题,为学习计算机组成原理的读者提供了很大的帮助。 本书主要分为两部分,第一部分主要是实验指导,介绍了计算机组成原理的相关理论知识和实验步骤,对于想要深入了解计算机组成原理的初学者非常有用。第二部分则是习题解析,对书中提供的习题进行了详细的解析,让读者更好地掌握计算机组成原理的相关知识。 《谭志虎计算机组成原理实验指导与习题解析PDF》的作者谭志虎是一位计算机科学与技术的专家,拥有丰富的教学经验和研究经验。书中的内容以通俗易懂,逻辑清晰为特点,非常适合初学者学习。 总之,如果你正在学习计算机组成原理,而又找不到合适的教材,那么《谭志虎计算机组成原理实验指导与习题解析PDF》绝对是一个不错的选择。它不仅内容详尽,还提供了大量的实验指导和习题解析,帮助你更好地理解计算机组成原理的相关知识。 ### 回答3: 谭志虎编写的《计算机组成原理实验指导与习题解析》是一本面向计算机科学学习者的实用教材,该书主要介绍计算机系统组成的基本概念、原理和设计方法,涵盖了计算机硬件和操作系统等方面的知识。读者可以通过该书学习到CPU的构成、指令系统、总线接口、存储器和IO设备等方面的知识,以及如何进行硬件设计和软件编程来实现计算机系统的功能。 该书以实际项目为例子,提供了大量的实验指导和习题解析,让读者通过实际操作来深入理解计算机系统的原理和设计方法实验内容非常丰富,包括用Verilog编写CPU指令集、设计和实现基于FPGA的CPU系统、实现计算机硬件和操作系统的简单功能等等。通过这些实验,读者能够更加全面和深入地理解计算机系统的各个方面。 除了实验指导和习题解析之外,该书还提供了大量的题目和答案,可以帮助读者检查自己的学习效果,加深对计算机系统原理的理解。该书的内容深入浅出,适合初学者学习和参考,同时也可以作为大学教学参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值