找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6337|回复: 34

技术贴,MATLAB矩阵与数组汇总讲解!

  [复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:28
  • 打卡月天数:7
  • 打卡总奖励:7961
  • 最近打卡:2025-12-22 17:16:30

3317

主题

285

回帖

2万

积分

管理员

积分
24106
发表于 2019-1-20 11:16:17 | 显示全部楼层 |阅读模式
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所示,图中具有相同行数的矩阵可以水平合并,而行数不同的矩阵是不能水平合并的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
工控课堂 www.gkket.com

0

主题

178

回帖

424

积分

注册会员

积分
424
发表于 2019-1-20 11:35:45 | 显示全部楼层
楼主您的技术水准,我最服你,其他都是浮云
工控课堂 www.gkket.com

0

主题

138

回帖

399

积分

注册会员

积分
399
发表于 2019-1-20 11:38:56 | 显示全部楼层
看到这帖子真是高兴!
工控课堂 www.gkket.com

0

主题

152

回帖

383

积分

注册会员

积分
383
发表于 2019-1-20 11:40:55 | 显示全部楼层
楼主加油,我们都看好你哦。
工控课堂 www.gkket.com

0

主题

137

回帖

350

积分

注册会员

积分
350
发表于 2019-1-20 11:41:16 | 显示全部楼层
无回帖,不论坛,这才是人道。
工控课堂 www.gkket.com

0

主题

165

回帖

385

积分

注册会员

积分
385
发表于 2019-1-20 11:45:23 | 显示全部楼层
好东西一定要看看!
工控课堂 www.gkket.com

0

主题

141

回帖

310

积分

注册会员

积分
310
发表于 2019-1-20 12:18:17 | 显示全部楼层
看了楼主的帖子,不由得精神一振,豁然开朗,牛掰
工控课堂 www.gkket.com

0

主题

162

回帖

441

积分

注册会员

积分
441
发表于 2019-1-20 12:18:49 | 显示全部楼层
真是难得给力的帖子啊。
工控课堂 www.gkket.com

0

主题

154

回帖

526

积分

中级会员

积分
526
发表于 2019-1-20 12:28:22 | 显示全部楼层
谢谢您的分享!
工控课堂 www.gkket.com

0

主题

202

回帖

444

积分

注册会员

积分
444
发表于 2019-1-20 12:51:31 | 显示全部楼层
谢谢您的分享!
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-23 06:00 , Processed in 0.089405 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表