《MATLAB7 基础教程》课件第2章_第1页
《MATLAB7 基础教程》课件第2章_第2页
《MATLAB7 基础教程》课件第2章_第3页
《MATLAB7 基础教程》课件第2章_第4页
《MATLAB7 基础教程》课件第2章_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2.1创建矩阵

2.2索引

2.3获取矩阵信息 2.4基本操作和运算

2.5空矩阵、标量和向量2.6多维数组

2.1.1创建矩阵和数值序列

1.创建矩阵

创建一个矩阵最简单的方法就是用中括号 [ ] 将元素置于其中。将中括号中的元素用空格或者逗号隔开,就可以创建一个行矩阵;将中括号中的元素用分号隔开,就可以创建一个列矩阵。

【例】在命令窗创建矩阵。2.1创建矩阵在命令窗输入:

>>A=[136195-812]

运行结果:

A=

136195-812

在命令窗输入:

>>B=[1,2,3;4,5,6;7,8,9]运行结果:

B=

123

456

789

当矩阵的阶数较大时,直接在命令窗口输入矩阵元素较为不便。为解决此问题,可以先将矩阵按创建原则写入一个M文件中,在MATLAB的命令窗口或程序中直接执行该M文件,即将矩阵调入工作区间。

【例】在 .M文件中创建矩阵。

在编辑窗输入:

C=[12345678910

11121314151617181920

21222324252627282930]

运行结果:

C=

12345678910

11121314151617181920

21222324252627282930

2.创建数值序列

在矩阵的合并以及索引操作中,常常要用到数值序列,因此MATLAB提供了一个创建数值序列的特殊运算符“:”。使用“:”运算符可创建一个数值序列,步进值的大小可以设置,默认步进值为1。

利用“:”运算符创建时(默认步进),数值序列的起始值和结束值可以是小数,也可以为负,起始值和结束值之差也可以不是整数,但是起始值必须小于结束值,否则会返回一个空矩阵。

【例】创建步进值为1的数值序列。

在命令窗输入:

>>A=10:14,B=-2.2:4.3

运行结果:

A=

1011121314

B=

-2.2000-1.2000-0.20000.80001.80002.8000

3.8000

可以在起始值和结束值之间插入步进值的设置。

【例】创建步进值为-0.4的数值序列。

在命令窗输入:

>>C=1.6:-0.4:-0.8

运行结果:

C=

1.60001.20000.80000.40000.0000-0.4000

-0.80002.1.2创建特殊矩阵

MATLAB提供了许多创建特殊矩阵的函数,表2-1列举了一些常用的矩阵创建函数。表2-1矩阵创建函数这些函数的返回值通常为double类型的矩阵。也可以使用ones、zeros、eye等函数创建任意数据类型的矩阵。

【例】创建int8类型的单位矩阵。

在命令窗输入:

>>A=eye(4,4,‘int8’)

>>A=eye([4,4],'int8')运行结果:

A=

1000

0100

0010

0001

【例】创建元素全为0的矩阵。

在命令窗输入:

>>B=zeros(2,3)运行结果:

B=

000

000

【例】创建幻方矩阵。

在命令窗输入:

>>C=magic(3)

运行结果:

C=

816

357

492命令diag(diag(X))可从一个已有的矩阵X中抽取对角元素,使其成为对角矩阵,也可以利用diag(V)将向量V转化为对角矩阵。

【例】创建对角矩阵。

在命令窗输入:

>>C=magic(3);

>>D=diag(diag(C))

运行结果:

D=

800

050

002如果在命令窗输入:

>>D=diag([8,5,2])

运行结果:

D=

800

050

002

rand函数用于产生在0~1之间均匀分布的伪随机数。

【例】

创建随机矩阵。

在命令窗输入:

>>E=rand(4,3)

运行结果:

randperm(n)命令将1~n的整数随机排序后产生一个行向量。

【例】创建随机置换向量。

在命令窗输入:

>>F=randperm(6)

运行结果:

F=

6351242.1.3合并矩阵

1.矩阵的合并

MATLAB可以将相同行数或列数的矩阵合并,也可以将不同阶数的矩阵合并为块状矩阵。利用中括号 [ ] 或者矩阵串接函数可以将相同行数或列数的矩阵合并,利用矩阵串接函数还可以合并块状矩阵。

【例】合并同阶矩阵。

在命令窗输入:

>>A=magic(3),B=ones(2,3),C=zeros(3,4),D=[A;B],E=[AC]运行结果:

A=

816

357

492

B=

111

111C=

0000

0000

0000

D=

816

357

492

111

111E=

8160000

3570000

4920000

MATLAB中包含如表2-2所示的矩阵串接函数。表2-2矩阵串接函数

cat函数与用中括号 [ ] 合并矩阵的方法作用基本相同,但是它还可以按照指定维串接更高维数的数组。

【例】合并同阶矩阵。

在命令窗输入:

>>A=magic(3),B=ones(3),C=cat(2,A,B),C=horzcat(A,B)

运行结果:

A=

816

357

492B=

111

111

111

C=

816111

357111

492111

C=

816111

357111

492111

【例】复制并平铺矩阵。

在命令窗输入:

>>A=magic(3),D=repmat(A,1,3)运行结果:

A=

816

357

492

D=

816816816

357357357

492492492

blkdiag函数从对角方向合并矩阵,形成的分块对角化矩阵除对角之外的元素均为0。

【例】创建分块对角化矩阵。

在命令窗输入:

>>A=magic(3),B=[123;456],E=blkdiag(A,B)

运行结果:

A=

816

357

492

B=

123

456E=

816000

357000

492000

000123

000456

2.不同数据类型矩阵的合并

MATLAB中的矩阵可以由不同数据类型的元素来合并,其结果为某个特定类型的矩阵,MATLAB自动将所有元素转化为其中的一种数据类型。表2-3给出了5种数据类型之间的转化结果。表2-3各数据类型之间转化结果例如,用double类型和single类型合成矩阵,最终得到的会是single类型的矩阵,MATLAB自动将double类型的元素转化为single类型。如果合成矩阵中含有空矩阵,空矩阵将会被忽略。

【例】合并double类型和single类型。

在命令窗输入:

>>x=[single(-2.8)pi5.13*10^100],class(x)运行结果:

x=

-2.80003.1416Inf

ans=

single

【例】合并double类型和integer类型。

在命令窗输入:

>>y=[int8(-22)int8(13)pi45/16],class(y)运行结果:

y=

-221333

ans=

int8

【例】

合并character类型和double类型。

在命令窗输入:

>>z=[‘A’

‘B’

‘C’6869],class(z)

运行结果:

z=

ABCDE

ans=

char

【例】

合并character类型和double类型。

在命令窗输入:

>>u=[truefalsepi],class(u)

运行结果:

u=

1.000003.1416

ans=

double2.2.1线性索引

MATLAB中可以只用一个下标访问二维矩阵中的元素。MATLAB对数据的存储形式不同于数据在命令窗中显示的形式,而是以列元素为序的方式存储。例如,矩阵A=[267;

428;309]实际上是以如下形式存储的:

2,4,3,6,2,0,7,8,9

如果要访问某个n×m阶矩阵的row行col列元素,则不但可以使用A(row,col)命令来访问,还可以使用A((col -1)*n+row)来访问。2.2索引

【例】访问3阶幻方矩阵A中2行3列的元素。

在命令窗输入:

>>A=magic(3),A(8)

运行结果:

A=

816

357

492

ans=

72.2.2访问单个元素

要访问某个矩阵的指定元素,需要用命令A(row,column)指定行号和列号,其中,A为矩阵变量,行号(row)在前,列号(column)在后。

【例】访问3阶幻方矩阵A中2行3列的元素。

在命令窗输入:

>>A=magic(3),A(2,3)运行结果:

A=

816

357

492

ans=

72.2.3访问多个元素

MATLAB可以一次性访问一个矩阵中的多个元素。对于如下4×4的幻方矩阵A,可以一次性计算它的列元素和,也可以用“:”运算符来减小它的尺寸。

【例】访问4阶幻方矩阵A的多个元素。

在命令窗输入:

>>A=magic(4),sum(A)运行结果:

A=

162313

511108

97612

414151

ans=

34343434继续在命令窗输入:

>>B=A(2:3,:)

或输入:

>>B=A(2:3,1:4)

运行结果:

B=

511108

97612

其中,“2:3”代表从第2行到第3行,“1:4”代表从第1列到第4列,“:”代表所有列。

利用数值序列也可以访问或者修改矩阵中的多个元素。

【例】

修改4阶幻方矩阵A的多个元素。

在命令窗输入:

>>C=A;C(1:3:end)=0

运行结果:

C=

0230

51108

90612

014150可以看出,以3为步进,从1到16的所有元素的值均被修改为0。“end”关键字在此处代表矩阵元素的最后一个索引,即16。在程序不知道矩阵具体阶数的情况下,使用关键字“end”会为编程带来很大方便。

一个矩阵也可以作为其他矩阵元素的索引。例如,可以用4阶幻方矩阵的第9个元素组成的矩阵作为索引。

【例】

用4阶幻方矩阵A的元素组成的矩阵作为索引。

在命令窗输入:

>>B=A(9*ones(2,5))运行结果:

B=

33333

333332.3.1矩阵的阶数与维数

表2-4给出有关获取矩阵维数、阶数的函数。

【例】

删除矩阵的行(降低矩阵阶数)。

在命令窗输入:

>>A=magic(4),A(1:2,:)=[]2.3获取矩阵信息表2-4有关矩阵阶数与维数的函数运行结果:

A=

162313

511108

97612

414151

A=

97612

414151

【例】获取向量长度。

在命令窗输入:

>>x=1:10,length(x)

运行结果:

x=

12345678910

ans=

10

【例】获取矩阵维数、阶数与元素数。

在命令窗输入:

>>A=magic(3),ndims(A)

运行结果:

A=

816

357

492

ans=

2继续在命令窗输入:

>>size(A)

运行结果:

ans=

33

或输入:

>>size(A,2)

运行结果:

ans=

3再在命令窗输入:

>>numel(A)

运行结果:

ans=

9

对于size函数,size(A,1)得到A的行阶数,size(A,2)得到A的列阶数,size(A,n)得到A的第n维的阶数。2.3.2矩阵元素的数据类型

表2-5给出了有关判断矩阵元素数据类型的函数。表2-5判断矩阵元素数据类型的函数

【例】使用isnumeric和isreal数据类型判断函数。

在命令窗输入:

>>A=[5+i8/34.2339jpi15-2i];

form=1:numel(A)

ifisnumeric(A(m))&&isreal(A(m))

disp(A(m))

end

end运行结果:

2.6667

4.2330

3.14162.3.3矩阵的数据结构

表2-6给出了有关判断矩阵元素数据结构的函数。表2-6判断矩阵元素数据结构的函数2.4.1矩阵的扩大和缩小

1.矩阵的扩大

如果在矩阵尺寸外存储一个元素,那么这个矩阵将扩大到指定的尺寸并能容纳新添加的元素。

【例】

用元素扩展矩阵。2.4基本操作和运算在命令窗输入:

>>A=magic(3),A(4,5)=100

运行结果:

A=

816

357

492

A=

81600

35700

49200

0000100也可以利用数值序列对矩阵进行扩展。

【例】用数值序列扩展矩阵。

在命令窗输入:

>>A=magic(3),A(3:4,3:5)=100

运行结果:

A=

816

357

492A=

81600

35700

49100100100

001001001002.矩阵的缩小

通过对矩阵的行或列赋空值,可以实现对矩阵的行或列的删除。

【例】删除矩阵的行。

在命令窗输入:

>>A=magic(3),A(3,:)=[]运行结果:

A=

816

357

492

A=

816

357

但是,不能直接删除矩阵的某个元素。如果需要删除某个元素,可以通过线性索引的方法来删除。

【例】删除矩阵的元素。

在命令窗输入:

>>A=magic(3),A(3)=[]

运行结果:

A=

816

357

492

A=

831596722.4.2改变矩阵的形状

表2-7给出了有关改变矩阵形状的函数。表2-7改变矩阵形状的函数

【例】改变矩阵的形状。

在命令窗输入:

>>A=[14710;25811;36912],B=reshape(A,2,6)

运行结果:

A=

14710

25811

36912

B=

1357911

24681012

利用transpose函数或者转置运算符“.'”可以对矩阵进行转置。

【例】矩阵的转置。

继续在命令窗输入:

>>C=A.‘

运行结果:

C=

123

456

789

101112

【例】

矩阵的复共轭转置。

在命令窗输入:

>>A=[1+9i2-6i3+7i;14-6i5+2i2-4i],B=A‘

运行结果:

A=

1.0000+9.0000i2.0000-6.0000i3.0000+7.0000i

14.0000-6.0000i5.0000+2.0000i2.0000-4.0000i

B=

1.0000-9.0000i14.0000+6.0000i

2.0000+6.0000i5.0000-2.0000i

3.0000-7.0000i2.0000+4.0000i

【例】将矩阵旋转90°。

在命令窗输入:

>>A=[14710;25811;36912],B=rot90(A)

运行结果:

A=

14710

25811

36912B=

101112

789

456

123

【例】水平翻转矩阵。

继续在命令窗输入:

>>C=fliplr(A)运行结果:

C=

10741

11852

129632.4.3矩阵的算术运算

表2-8给出了MATLAB提供的算术运算符。表2-8算 术 运 算 符2.4.4矩阵的关系运算和逻辑运算

1.关系运算

表2-9给出了MATLAB的矩阵关系运算符。表2-9关 系 运 算 符

【例】

矩阵的关系运算。

在命令窗输入:

>>A=[276;905;30.56];

>>B=[870;325;4-17];

>>A==B

运行结果:

ans=

010

001

000

2.逻辑运算

MATLAB的逻辑运算符有三种:元素方式逻辑运算符、比特方式逻辑运算符和短路逻辑运算符。

元素方式逻辑运算的操作数为两个长度相同的逻辑向量,如果向量元素为有限非零数值类型,MATLAB自动将其转化为逻辑“1”。表2-10给出了MATLAB的元素方式的逻辑运算符。实例中,A=[01101];B=[11001]。表2-10元素方式的逻辑运算符比特方式逻辑运算的操作数必须是非负整数类型的标量或数组。表2-11给出了比特方式的逻辑运算函数。实例中:

A=28;%binary11100

B=21;%binary10101

短路逻辑运算符的操作数是蕴含标量值的逻辑表达式。表2-12给出了短路逻辑运算符。表2-11比特方式的逻辑运算函数表2-12短路逻辑运算符短路逻辑运算常用于if或者while语句的条件判断中。另外,短路逻辑运算还可以避免除数为零的错误:

【例】

表达式逻辑与。

在命令窗输入:

>>a=1;b=0;

>>x=(b~=0)&&(a/b>18.5)

运行结果:

x=

02.5.1空矩阵

一个矩阵至少应该有一维,而MATLAB中可以存在0×0的空矩阵,更为复杂的空矩阵有如5×0维和0×3维的矩阵。事实上,空矩阵常常用于循环语句中,作为第一次矩阵合并或串接的矩阵,这会给编程带来很多方便。2.5空矩阵、标量和向量

【例】空矩阵。

在命令窗输入:

>>A=[],B=ones(5,0)

运行结果:

A=

[]

B=

Emptymatrix:5-by-02.5.2标量

单一的实数或者复数代表MATLAB中1×1的矩阵,也称做“标量”。

【例】

标量。

在命令窗输入:

>>A=4;B=ndims(A),isscalar(A)

运行结果:

B=

2

ans=

1

运行结果表明,A的维数为2(1×1矩阵),但是A为标量。2.5.3向量

矩阵的某个维阶数如果等于1,那么它就是向量。一个向量可以由其他向量组合而成,但是对应维的阶数必须为1。例如,构成列向量的元素必须是标量或者列向量,用空矩阵合成向量将会被忽略。

【例】向量。

在命令窗输入:

>>A=[pi32-3],B=[],C=[24],D=[ABC]运行结果:

A=

3.141632.0000-3.0000

B=

[]

C=

24

D=

3.141632.0000-3.00002.00004.0000多维数组是二维常规矩阵的扩展,可以利用下标来访问一个二维矩阵,第一个下标代表行索引,第二个代表列索引。如果是多维矩阵,则需要增加下标来索引。例如图2-1中,访问第2行第3列第2页的元素,需要用到下标(2,3,2)。

当一个数组维数增加时,它的下标也相应的增加。例如一个4维数组有4个下标,前两个下标代表行和列,后两个下标则分别代表数组的第3维和第4维。2.6多维数组图2-1多维数组示意图2.6.1多维数组的创建

多维数组的创建方法与矩阵的创建类似。另外,MATLAB还提供了专门的串接函数用于创建多维数组。

最简单的创建方法就是将矩阵扩展为多维数组。

【例】

创建多维数组。

在命令窗输入:

>>A=[578;019;436];A(:,:,2)=[104;356;987]运行结果:

A(:,:,1)=

578

019

436

A(:,:,2)=

104

356

987

与矩阵的扩展类似,多维数组也可以直接进行扩展。【例】扩展多维数组。

继续在命令窗输入:

>>A(:,:,3)=0

运行结果:

A(:,:,1)=

578

019

436A(:,:,2)=

104

356

987

A(:,:,3)=

000

000

000

多维数组的创建同样可以使用randn、ones、zeros等函数。【例】利用函数创建多维数组。

在命令窗输入:

>>B=randn(4,3,2)

运行结果:

B(:,:,1)=

-0.6918-1.4410 0.8156

0.85800.5711 0.7119

1.2540-0.3999 1.2902

-1.59370.6900 0.6686B(:,:,2)=

1.1908-1.6041 -0.8051

-1.20250.25730.5287

-0.0198-1.0565 0.2193

-0.15671.4151 -0.9219

利用串接函数也可以实现多维数组的创建。【例】利用串接函数创建多维数组。

在命令窗输入:

>>C=cat(3,[28;15],[13;49])

运行结果:

C(:,:,1)=

28

15

C(:,:,2)=

13

492.6.2多维数组的索引

很多运用于矩阵的方法都可以推广到多维数组中。运用下标可以访问多维数组的一个元素,同样可以使用向量作为数组的下标。

【例】多维数组的下标。

在命令窗输入:

>>A=10*rand(4,3,2),b=A(1,1,2),c=A([3,4],1,2)运行结果:

A(:,:,1)=

7.09366.55109.5974

7.54691.62613.4039

2.76031.19005.8527

6.79704.98362.2381

A(:,:,2)=

7.51278.90901.4929

2.55109.59292.5751

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论