MATLAB矩阵与数组

Version:1.0StartHTML:000000542EndHTML:000541203StartFragment:000421344EndFragment:000541135StartSelection:000421344EndSelection:000541135SourceURL:https://mp.weixin.qq.com/s?__biz=MzUyODE4MTAwNw==&tempkey=OTg5XzlnV2dyUE1xa3JCZnkxaXNrcDZtN3dPNDU2ME1tR01KenR0WWpiV0dPNUVtN2FaWVRfbk4yNDNJVFlDV0RoblIxcEJDQm1TOE9TNDViOERqQkRmZjByQll2aTU1WXlOek1XV3JlMzRlRDNOdXVicS1tZVZtXzNUc1ZyQ3EtUE5tUFdjSUQ2Zng4cmo5TmJ5WmNQRzQ1bjRlWDhIbjFTa3Zwd1JiQWd%2Bfg%3D%3D&chksm=7a7573c54d02fad3ca055c095d23414d7ab233491fb4bcb58d71201da6ba60775a3ef79cfc19

MATLAB既然以矩阵实验室命名,就说明该软件在矩阵计算方面具有非常优异的表现。在MATLAB中,一般情况下一个矩阵就是指一个长方形的数组。特殊情况有两个,一是单一元素的标量,二是只有一行或者一列的矩阵,也就是向量。MATLAB也有其他储存数值和非数值数据的方式,但是对于初学者来说,最好是将所有的情况都考虑为矩阵,这样更容易使用。MATLAB的设计理念是所有的操作尽可能的自然。其他编程语言在处理数据的过程中,每次只能处理一个数值,而MATLAB则允许用户快速方便地采用矩阵来操作。

1.矩阵的创建与组合

MATLAB最基本的数据结构就是矩阵,一个二维的、长方形形状的数据,可以用易于使用的矩阵形式来储存,这些数据可以是数字、字符、逻辑状态(true或者false),甚至是MATLAB的结构数组类型。MATLAB使用二维的矩阵来储存单个数值或者线性数列。MATLAB同时支持多于二维的数据结构。

1.1创建简单矩阵

MATLAB是基于矩阵的计算环境。所有用户输入的数据都将会以矩阵的形式或者多维数组来储存。即使是一个数值型的标量,比如说100,都会以矩阵的形式来储存。

【例2-1】  单个标量的输入示例。

>> A = 100;              % 输入数值A

>> whos %  whos命令可以用来查看Workspace中所存储的变量信息

  Name      Size            Bytes  Class    Attributes

  A         1x1                 8 double  

从本例可以看出,标量A的存储格式为1×1的矩阵,它占用了8个字节的内存空间,数据的类型是双精度浮点数。

创建MATLAB矩阵最简单的方式是使用MATLAB的矩阵构建标识符,即方括号[]。创建一个行向量只需要在中括号里面输入相应的元素,并用空格或者逗号作为分隔符分隔相邻的元素即可。

>> row = [E1, E2, ..., En]

>> row = [E1 E2 ... En]

如果要在矩阵中输入下一行,用分号作为行之间的分隔符即可:

>>A = [row1; row2; ...; rown]

例如创建一个包括5个元素的单行矩阵,可以在命令行中输入下面的命令:

>> A = [12 62 93 -8 22];

【例2-2】  创建2~20区间内以2为步长的向量。

在MATLAB中可以通过“初值:步长:终值”的方式创立向量。本例中可以在命令窗口中输入:

>>a=2:2:20

按回车键,在命令窗口显示为:

a =

     2     4    6     8    10   12    14    16   18    20

需要指出的是:步长可以为正数、负数或者小数。若用户不指定表达式中的步长一项,MATLAB则默认步长为1。例如:

>> b=1:10

b =

     1     2    3     4     5    6     7     8    9    10

另外如果用户指定的区间并不是步长的整数倍,那么将以初值为准,依次加上步长来产生序列,正如下面的c中所示。

>> c=3:5:15

c =

     3     8   13

【例2-3】  举例说明如何创建一个3行5列的矩阵。需要指出的是:在矩阵的输入过程中,矩阵的每一行必须有同样多的元素个数。

>> A = [12 62 93 -8 22; 16 2 87 43 91; -4 17-72 95 6]

A =

    12    62   93    -8    22

    16     2   87    43    91

    -4    17  -72    95     6

方括号标识符只能创建二维矩阵,包括0´0、1´1、1´n、m´n等类型。如果要创建多维矩阵,请继续关注公号文章。而如果需要读取和赋值矩阵中的某些元素,也请继续关注。

在将一个带正负号的数值输入矩阵的时候要注意,符号后面要紧接着数值,两者之间不要有空格。通过下面的比较可以看出有哪些不同。

【例2-4】  矩阵中带符号的数值输入示例。

下面两个在运算表达式中的例子说明,符号与数值之间是否有空格并不影响计算的结果。

>> 7 -2 +5

ans =

    10

>> 7 - 2 +5

ans =

    10

但是下面的两个例子则说明,在矩阵的输入过程中如果符号与数值之间有空格,那么其结果是不同的。读者在这方面一定要注意,以免导致计算结果错误。

>> [7 - 2 + 5]

ans =

    10

>> [7 -2 +5]

ans =

     7    -2    5

1.2  创建特殊矩阵

MATLAB内嵌有很多函数,可以直接用来创建不同的特殊矩阵。比如创建汉克尔矩阵和范德蒙德矩阵。表2-1中列出了一些常用的特殊矩阵的创建函数。这里需要再次强调一下,函数名称对于大小写是敏感的,在MATLAB中函数名称一般是全部小写的,如果转换了其中一个字母的大小写那么可能调用的就是另一个函数或者会发生调用错误。

表2-1 常用特殊矩阵的创建函数

函数名称函数功能函数名称函数功能

zeros产生一个所有元素为零的矩阵pascal生成PASCAL矩阵

diag产生一个对角矩阵rand随机产生均匀分布的矩阵

ones生成所有元素全为1的矩阵randn随机产生正态分布的矩阵

eye生成单位矩阵randperm产生一个由指定整数元素随机分布构成的矩阵

magic生成魔方矩阵

【例2-5】  特殊矩阵创建函数示例。

>> ones(4)         %创建所有元素为1的矩阵

ans =

     1     1    1     1

     1     1    1     1

     1     1    1     1

     1     1    1     1

>> eye(5)         %创建单位矩阵

ans =

     1     0    0     0     0

     0     1    0     0     0

     0     0    1     0     0

     0     0    0     1     0

     0     0    0     0     1

>> rand(2,3)       %创建2´3的均匀分布随机数矩阵

ans =

   0.8147    0.1270    0.6324

    0.9058    0.9134   0.0975

>> randperm(7)     % 创建由1∶7构成的随机数列

ans =

     5     1    2     7     3    4     6

需要指出的是:每次运行随机函数都会得到不同的结果,这是因为默认状态下随机数的种子都不同。这也是随机数的意义所在。若要用函数产生相同的矩阵以验证操作的结果,可以按如下方法设置随机种子状态:

>>rand('state', 0);

>> randperm(7)

ans =

     2     7    4     3     6    5     1

通过如此设置,读者就可以得到和本书中相同的结果。

1.3 矩阵的合并

矩阵的合并是指将两个或者多个矩阵合并到一起构成一个新的矩阵。前面提到的矩阵标识符方括号[],不仅可以用来创建新的矩阵,还可以用来将若干个矩阵合并到一起。

表达式C = [A B]将矩阵A和B在水平方向上合并到一起,而表达式C = [A; B]则将矩阵A和B在竖直方向上合并到一起。

【例2-6】  求矩阵A和B在竖直方向上合并到一起后得到的矩阵C。

>> rand('state', 0);                 % 设置随机种子,便于读者验证

>> A = ones(2, 5) * 6;           % 元素全部为6的2´5矩阵

>> B = rand(3, 5);               %  3´5 的随机数矩阵

>> C = [A; B]

C =

   6.0000    6.0000    6.0000   6.0000    6.0000

   6.0000    6.0000    6.0000   6.0000    6.0000

    0.9501    0.4860   0.4565    0.4447    0.9218

   0.2311    0.8913    0.0185   0.6154    0.7382

   0.6068    0.7621    0.8214   0.7919    0.1763

需要指出的是:在矩阵的合并过程中要保持新生成的矩阵为长方形,否则MATLAB将会报错。也就是说,如果要在水平方向上合并矩阵,那么每个子矩阵的行数必须相同;如果要在竖直方向上合并矩阵,那么每个子矩阵的列数必须相同。

如图2-1所示,图中具有相同行数的矩阵可以水平合并,而行数不同的矩阵是不能水平合并的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容