《matlab数组运算基础》由会员分享,可在线阅读,更多相关《matlab数组运算基础(125页珍藏版)》请在金锄头文库上搜索。
1、,第二章 数组的运算基础,数组的创建标量数组运算数组数组的运算 标准数组 数组的大小 矩阵和数组的关系运算和逻辑运算,第一节 数组的创建,一、一维数组的创建二、二维数组的创建三、多维数组的创建,一、一维数组的创建,1.创建一个既含有实数,又含有虚数的一个一维数组: a=2 1+i 0 2*pi sqrt(2); a=2 1+i 0 2*pi sqrt(2) a=2.000 1.000+1.000i 0 6.2832 1.4142,提示:若在变量或表示式后面加“;”,则不显示变量或表达式的内容。所以在Matlab 中, 若要看到表达式的运算结果,则不应在其后加“;”。,2. afirst :la
2、sta=-2 :2 a=-2 -1 0 1 2 a=-2.5 :2.55 a=-2.5000 -1.5000 -0.5000 0.5000 1.5000 2.5000,afirst :increment: lasta=-6 :2 :6 a=-6 -4 -2 0 2 4 6 a=-5.5 :1.5 :5.65Columns 1 through 4 -5.5000 -4.0000 -2.5000 -1.0000Columns 5 through 8 0.5000 2.0000 3.5000 5.0000,4. a=linspace(first ,last,n)创建均匀间隔的行向量a,first是首
3、元素,last是末元素,n为元素总数。示例如下: a=linspace(-2,2,5) ans =-2 -1 0 1 2,5. a=logspace(first,last,n)创建对数间隔的行向量a,first是首元素,last是末元素,若有n个元素。示例如下: a=logspace(-2,2,5) ans =Columns 1 through 4 0.0100 0.1000 1.0000 10.0000Column 5 100.0000,二、二维数组的创建a=1 2 3 ;3 0 1;4 2 1 a =1 2 33 0 14 2 1 b=1 sin(pi/2);0 3*sqrt(40) b
4、= 1.0000 1.0000 0 18.9737,另外,也可通过M文件创建二维数组:打开文件编辑器(即点击Matlab桌面左上角的快捷图标),则进入M文件编辑器环境在编辑器内录入a=1 2 1 1 2 1 2;3 4 5 5 5 5 0;54 3 3 3 3 3;3 0 4 6 5 5 4 ,然后将其保存为名为myfirstmatrix的文件,在命令窗口提示符后输入myfirstmatrix,就可得到上面的数组,即, myfirstmatrix, a =1 2 1 1 2 1 23 4 5 5 5 5 05 4 3 3 3 3 33 0 4 6 5 5 4,三、多维数组的创建创建一个含3页,
5、每页3行,2列的三维数组,如下例所示: a=zeros(3,2); a(:,:,2)=1 1;3 3;2 0 a(:,:,1) =0 00 00 0 a(:,:,2) =1 13 32 0,a(:,:,3)=4 a(:,:,1) =0 00 0 0 0 a(:,:,2) =1 13 32 0 a(:,:,3) =4 44 44 4,上边的代码首先建立了一个元素均为0的3行2列的二维数组,该数组是被索引的数组(被索引的数组维数可由用户根据情况自行定义),将该二维数组做为三维数组的第一页,然后,通过该二维数组的行数,列数直接索引,添加第二和第三页。其次,可以利用标准数组函数创建三维数组,如下列示:
6、 a=ones(4,3,2) a(:,:,1) =1 1 11 1 11 1 11 1 1 a(:,:,2) =1 1 1 1 1 11 1 11 1 1,上边的代码生成了一个4行,3列,2页的三维全1数组。从结果可见,该数组是按页显示的,首先显示第1页,然后显示第2页。除zeros外,ones、eye、rand和randn等函数构成的标准数组也可以按照相同的方法生成三维数组。再次,可以利用函数生成三维数组。示例如下: b=reshape(a, 4,6) b =1 1 1 1 1 11 1 1 1 1 11 1 1 1 1 11 1 1 1 1 1reshape函数是一个数组重塑函数,原来的a
7、数组是一个两页,每页4行3列的三维数组,经reshape重塑后得到一个4行6列的二维数组b。,reshape(b,2,4,3) ans(:,:,1) =1 1 1 11 1 1 1 ans(:,:,2) = 1 1 1 11 1 1 1 ans(:,:,3) =1 1 1 11 1 1 1b再经reshape重塑后,又得到了一个3页,每页2行4列的三维数组。,提示:reshape函数可以将任何维数的数组转变成其它维数的数组,在数组的处理方法一节中还要继续介绍该函数的使用。,第二节 标量数组运算,数组与标量之间的加法、减法、乘法和除法运算是将标量与数组中的所有元素进行算。 a=1 3 2 4;-
8、1 -3 0 1; a-2 ans =-1 1 0 2-3 -5 -2 -1,a*2+1 ans =3 7 5 9-1 -5 1 3 a*2/3 ans =0.6667 2.0000 1.3333 2.6667,第三节 数组数组的运算,一、数组的四则运算和幂运算,a=1 4 2 -1; b=-1 1 -2 2; a+b ans =0 5 0 1 a-b ans =2 3 4 -3,a.*b ans =-1 4 -4 -2 a./b ans =-1.0000 4.0000 -1.0000 -0.5000 b.a ans =-1.0000 4.0000 -1.0000 -0.5000 a.b an
9、s = -1.0000 0.2500 -1.0000 -2.0000,提示:数组相乘,不能使用“*”,而是“.*”,数组相除分左除和右除之分,左除用符号“.”,右除用符号“./”。从上面a./b和b.a的结果可见,数组a右除b等于b左除a。,在Matlab中,数组的幂运算有三种方式:一是以标量做幂指数,数组中的诸元素做底数;二是以标量做底数,数组中的诸元素做幂指数;三是若幂指数和底数是相同维数的数组,就执行元素对元素的幂运算,幂运算的符号为“.”。分别示例如下: a.2 ans =1 16 4 1 2.a ans =2.0000 16.0000 4.0000 0.5000 a.b ans =1
10、.0000 4.0000 0.2500 1.0000,上面是以一维数组为例,进行的数组一数组运算,若是二维数组应遵循同样的运算规则。示例如下: a=1 2 1;2 1 4; b=2 2 2;1 1 1; c=a+b c =3 4 33 2 5 d=a-b d =-1 0 -11 0 3 e=a.*b e =2 4 22 1 4 f=a./b,f =0.5000 1.0000 0.50002.0000 1.0000 4.0000 g=b.a g =0.5000 1.0000 0.50002.0000 1.0000 4.0000 h=a.b h =1 4 12 1 4 j=b.a j =2 4 2
11、1 1 1,二、矩阵的四则运算和幂运算,1. 矩阵的加、减运算矩阵的加、减运算和数组的加、减运算没有区别,其运算法则与普通的加、减运算相同,需要注意的是相加、减的两个矩阵必须有相同的阶数,若其中一个为标量除外。见下例: a=1 2 3 ;3 0 1;4 2 1;b=3 2 1;1 0 3;1 2 4;e=4;f=a+e,f =5 6 77 4 58 6 5 c=a+b c =4 4 44 0 45 4 5 d=1 1 1; g=c-d ? Error using = =- Matrix dimensions must agree.,当作e=c-d的运算时出现了错误,从错误的提示发现,是由于c和
12、d的维数不一致所致。 2. 矩阵的乘法运算矩阵的乘法使用“*”运算符,当矩阵a为i*j阶,b为j* k阶时,矩阵a和b才能相乘。在命令窗口中重新调用a和b,有a=1 2 3;3 0 1;4 2 1;b=3 2 1;1 0 3;1 2 4;c= a*b,c =8 8 1910 8 715 10 14 e= c*d ? Error using = =-1 Matrix dimensions must agree. e= d*c e =33 26 40 下面,我们再来看一下a.*b的结果 aa= a.*b aa= 3 4 33 0 34 4 4,可见,a.*b是对应元素相乘,做的是数组的乘法,而a*
13、b是遵循矩阵相乘的规则,做的是矩阵的乘法。3. 矩阵的除法运算与数组的除法运算一样,矩阵相除也分为左除“”和右除“/”,若a0,则ab和b/a的运算均可以实现。ab等价于inv(a)*b,而b/a等价于b*inv(a)。事实上,inv(a)*b是方程a*x=b的解,b*inv(a)是x*a=b的解。一般情况下,abb/a。下面通过实例看一下矩阵的除法运算。 a=1 2 3;3 0 1;4 2 1; b=5 ;5 ; 5; c= ab c=1.1111-0.55561.6667,b=5 5 5;5 5 5;5 5 5; c=ab c =1.1111 1.1111 1.1111-0.5556 -0.5556 -0.55561.6667 1.6667 1.6667 c=b/a c=1.3889 -0.2778 1.11111.3889 -0.2778 1.11111.3889 -0.2778 1.1111,