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所示,图中具有相同行数的矩阵可以水平合并,而行数不同的矩阵是不能水平合并的。

c++以空格分开的输入数组_技术贴,MATLAB矩阵与数组汇总讲解相关推荐

  1. es6一维数组转二维数组_技术图文:Numpy 一维数组 VS. Pandas Series

    背景 Numpy 提供的最重要的数据结构是 ndarray,它是 Python 中 list 的扩展. Pandas 提供了两种非常重要的数据结构 Series和DataFrame. Numpy 中的 ...

  2. c++以空格分开的输入数组_技术贴,MATLAB矩阵与数组汇总讲解!

    MATLAB既然以矩阵实验室命名,就说明该软件在矩阵计算方面具有非常优异的表现.在MATLAB中,一般情况下一个矩阵就是指一个长方形的数组.特殊情况有两个,一是单一元素的标量,二是只有一行或者一列的矩 ...

  3. cmake字符串转数组_掌握常用的数据结构之数组和字符串

    点击上方蓝字设为星标 每周一.三.五上午 8:30 准时推送 下面开始今天的学习- 数组和字符串 所谓数组,是有序的元素序列.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用 ...

  4. scala 字符串转换数组_如何在Scala中将字节数组转换为字符串?

    scala 字符串转换数组 Byte Array in Scala is an array of elements of a byte type. String in Scala is a colle ...

  5. c++随机打乱数组_编程之路之php数组操作详解【文末有惊喜】

    一.数组的操作 数组是一种复合数据类型,是数据的集合. 数组中的数据称为元素,每个元素是由键和值组成的键值对. 二.数组分类 1.关联数组 数据是由键和值形式构成的数组,键和值有一定关系 $arr = ...

  6. java合并两个数组_「JAVA」两个数组的交集—力扣每日一题(一)

    示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] ...

  7. printf打印数组_(45)C++面试之把数组排成最小的数

    // 面试题45:把数组排成最小的数 // 题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼 // 接出的所有数字中最小的一个.例如输入数组{3, 32, 321},则打印出这3 ...

  8. python 创建空的numpy数组_真假美猴王-Numpy数据与Python数组的区别与联系

    Numpy,是python中的一个矩阵计算包,功能类似matlab的矩阵计算.Numpy的诞生弥补了下面提到的两项的不足,numpy提供了两种基本的对象:ndarray(N-dimensional a ...

  9. python数组相减_对Python 中矩阵或者数组相减的法则详解

    对Python 中矩阵或者数组相减的法则详解 最近在做编程练习,发现有些结果的值与答案相差较大,通过分析比较得出结论,大概过程如下: 定义了一个计算损失的函数: def error(yhat,labe ...

最新文章

  1. pyDash : Linux 性能监测工具
  2. WEB前端学习六 js什么是闭包
  3. ebs r12 -- adadmin: error while loading shared libraries: libclntsh.so.10.1
  4. 关于Spring的事务Transactional,锁同步,并发线程
  5. pyinstaller与anaconda python_python – 在Anaconda安装后运行pyinstaller导致ImportError:没有名为’pefile’的模块...
  6. zookeeper启动后查看状态的Error contacting service. It is probably not running.错误
  7. linux内核之数据机构
  8. darknet53 作用_darknet53 yolo 下的识别训练
  9. EDKII Build Process:EDKII项目源码的配置、编译流程[3]
  10. 动词ing形式的5种用法_加ing的形式有哪几种?怎样用
  11. nmap工具进行端口扫描
  12. Swift5 字符串(String)操作
  13. 使用Python来模拟鼠标的点击; 模拟键盘
  14. filco蓝牙不好用_FilcoMinilaAir蓝牙机械键盘使用感受,做工精细手感优良但并不完美...
  15. IM 产品设计思考(1)- 传统 IM
  16. javascript作用域 (Scope) ---- 什么是作用域?
  17. 普乐蛙小型5d电影设备|5d电影动感电影体验馆|VR景区影院设备
  18. android开发中论坛帖子图片的排版
  19. c语言中%加字母是啥意思,%C是什么意思? C语言中%c,%s分别代表什么意思?
  20. gcc 内联汇编用法介绍

热门文章

  1. 使用maven+eclipse搭建最简单的struts2的HelloWorld
  2. IE浏览器里无法运行脚本(script)常见的解决方法!
  3. usb-key登录windows+远程桌面
  4. js禁止用户右键等操作
  5. java获得项目绝对路径
  6. 棋盘游戏的人工智能(二)------剪支
  7. c语言 mysql_bind,C语言连接SQLSERVER数据库
  8. java枚举变量带括号_Java~如何使用Enum(枚举)和Lambda表达式
  9. linux将b1内容重定向到b3,linux
  10. android 设置按钮高度,如何在本机android中设置按钮的高度