【Matlab入门】 第二章 向量和矩阵

这篇具有很好参考价值的文章主要介绍了【Matlab入门】 第二章 向量和矩阵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

警告!警告!你现在所查看的这一章,是matlab最核心、最重要的功能区块。务必将向量组、数组(我学了C,还是这样叫比较顺口)、矩阵及其运算学明白。在学习本章之前,请观看者有线性代数入门知识,至少要学到特征值部分,不然理解会十分困难。倘若你准备好的话,进入这一章的学习之旅吧。

第二章 向量和矩阵

本章将从初学者角度入手,教会你如何利用这个闻名世界的工具计算线代中复杂的矩阵和向量运算:转置、求逆、点乘、矩阵乘。

一、如何生成/定义一个向量

1.冒号表达式

向量生成与子矩阵提取最常用的表达式为冒号表达式。利用冒号表达式生成向量的具体格式为:V=a:b:c
该函数将生成一个行向量v,其中a为向量的起始值,b为步距,即从a出发,每隔步距b取一个点,直至不超过c这个最大值,如果b省略,步距默认为1。一般来说,步距也可以为负值:

>> V = pi:-0.01:-2

V =15

    3.1416    3.1316    3.1216    3.1116    3.1016

后方若干个元素为节省篇幅已经省略。

2.定义行向量的直接输入法

和生成行向量的代码并不同:定义指的是这个向量内的值都是已知的,定义时可以直接写A=[a,b,c],这里既可以用逗号来分割,也可以用空格。

>> A = [8,9,10]

A =

     8     9    10

3.列向量的定义法

Ⅰ 直接输入法

元素之间既不用逗号,也不用空格,用回车来代替:

>> A = [1
2
3
4
]

A =

     1
     2
     3
     4
Ⅱ 转置法

将行向量转变为列向量,转置符号为“‘”(单引号):

>> A = [1 2 3 4]'

A =

     1
     2
     3
     4

你明白了吗?

4.函数生成法

Ⅰ linspace函数

使用linspace(start,end,n)来创建两个限定值(对实数和复数都可用)之间固定数量的值,该函数用于生成等间隔向量,会生成从start到end之间的n个等间隔数值,start为起始值,看作闭区间的左侧,end为终止值,看作闭区间的右侧:

>> A = linspace(1,5,3)

A =

     1     3     5

当要生成100个数据时,n可以省略,默认生成100个。你可能会看到关于endpoint使得序列成为右开区间的用法,这一用法在R2022a已经失效,仅当了解:

>> A = linspace(1,5,3,false)
错误使用 linspace
输入参数太多。
Ⅱ 随机、单位和全0

使用zeros(1,n)、rand(1,n)和ones(1,n)函数:第一个生成有n个0的行向量,第二个随机生成包含从0-1的n个数的行向量,第三个生成有n个1的行向量。

Ⅲ logspace函数

格式为logspace(a,b,n),生成从10的a次方开始,到10的b次方结束的共n个向量的一维数组:

>> A = logspace(2,10,8)

A =

   1.0e+10 *15

    0.0000    0.0000    0.0000    0.0000    0.000468

    0.0052    0.0720    1.0000

在R2022a版本中,并不可以输入log2space输出2的a次方序列,大家可以尝试一下。

二、如何生成/定义一个矩阵

1.利用函数生成矩阵

Ⅰ 函数集锦

ones(n):产生n行n列的全1矩阵,ones(m,n):产生m行n列的全1矩阵;zeros()函数:同理;
rand()函数:产生在(0,1)区间均匀分布的随机阵,生成方式参考ones函数。
randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵;
tril()下三角矩阵;triu()上三角矩阵;eye()函数:产生单位阵;
diag(X):若 X 是矩阵,则 diag(X) 为 X 的主对角线向量(且以列向量方式排布),若 X 是向量,diag(X) 产生以 X 为主对角线的对角矩阵,其余元素由0补齐,这一部分比较抽象,上代码:

A =

     1     2     3
     4     5     6
     7     8     9

>> diag(A)

ans =

     1
     5
     9

>> B = diag(ans)

B =

     1     0     0
     0     5     0
     0     0     9
Ⅱ diag函数

diag(X,k)是提取矩阵第k条对角线的元素;diag(v,k)用于生成主对角线上数第k条对角线为向量v的矩阵,若k为负值则向下数k条:

A =

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16

>> diag(A,2)

ans =

     3
     8

>> diag(A,-2)

ans =

     9
    14

v =

     1
     2
     3

>> diag(v,1)

ans =

     0     1     0     0
     0     0     2     0
     0     0     0     3
     0     0     0     0

>> diag(v,-1)

ans =

     0     0     0     0
     1     0     0     0
     0     2     0     0
     0     0     3     0
Ⅲ 新旧版本的小差异

你可能还会看到利用函数linspace来生成矩阵的,这个方式在R2022a中并不适用,格式为:linspace([start1,start2…],[end1,end2…],n),start系列为每一行的起始值,end系列为每一行的终止值,n为列数,旧版本可以试着用:

>>A = linspace([1,2],[3,10],4)
Ⅳ 特殊矩阵的生成

大部分已经在第一部分介绍过,补充魔方矩阵(幻方矩阵):该矩阵一定为方阵,且对角线元素之和与每行、每列之和相等,每个元素不能相同,生成n阶魔方矩阵的命令为magic(n),n为阶数,魔方矩阵没有二阶,且同一阶的幻方矩阵不止一个。但是Matlab是按照固定的算法来生成的,所以每次调用该函数生成的魔方矩阵都相同。可以通过第五部分介绍的翻转函数和转置函数(除符号外,转置行为也有专门的函数)来得到另外6种形式,函数本身不在这里介绍,但是提一下引用的方式:

>> A = magic(4);
>> B = flipud(A);
>> C = fliplr(A);
>> D = flipud(fliplr(A));
>> E = flipud(transpose(A));
>> F = fliplr(transpose(A));
>> G = flipud(fliplr(transpose(A)));

2.定义矩阵的直接输入法

矩阵内容放在方括号内,利用逗号隔开同一行的元素,不同行使用分号(分号可以用回车来代替)分隔开:

>> A = [1,2,3;4,5,6;7,8,9]

A =

     1     2     3
     4     5     6
     7     8     9

>> A = [1,2,3
4,5,6
7,8,9]

A =

     1     2     3
     4     5     6
     7     8     9

三、子矩阵的提取及修改

1.子矩阵/子元素的提取

Ⅰ 子矩阵

B=A(v1,v2) v1表示子矩阵要保留的行号(多个行号使用分号隔开)组成的向量,v2表示子矩阵要保留的列号组成的向量

A =

     1     2     3
     4     5     6
     7     8     9

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

B =

     2     3
     5     6

Ⅱ 子元素

由Ⅰ可见,如果我们想要其中的一个元素,直接输入A(m,n)即可。这些手段对于向量同样适用。如果要提取所有的行或者所有的列,逗号前或者逗号后保留冒号即可:

A =

     1     2     3
     4     5     6
     7     8     9

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

B =

     1     2
     4     5
     7     8

Ⅲ 额外的用法

在表达式中引入步距,譬如你想调用1,3,5,7列这样均匀的列数,完全不必单独输入:

>> A = rand(6);
>> B = A(1:2:5,1:2)

B =

    0.8143    0.6160
    0.9293    0.3517
    0.1966    0.5853

这个格式在向量位置介绍过,提取了1:2:5的行,实质上就是1、3、5行,以1为起始值,2为步距,5为终止值,并且提取了1、2两列,我们看看A的对应位置是不是这些数据:

>> A

A =
    0.8143    0.6160    0.9172    0.0759    0.5688    0.3112      
    0.2435    0.4733    0.2858    0.0540    0.4694    0.5285 
    0.9293    0.3517    0.7572    0.5308    0.0119    0.1656
    0.3500    0.8308    0.7537    0.7792    0.3371    0.6020
    0.1966    0.5853    0.3804    0.9340    0.1622    0.2630
    0.2511    0.5497    0.5678    0.1299    0.7943    0.6541

完全相符,放心使用。

2.子矩阵/元素的修改

提取子元素或者子矩阵直接赋值,以下是代码示例,不再详细介绍格式

A =

     1     2     3
     4     5     6
     7     8     9

>> A(1:2,2:3) = [10,11;11,12]

A =

     1    10    11
     4    11    12
     7     8     9

注意不要混淆对象,要直接对子矩阵修改,而不是再将子矩阵赋值给某个变量,再修改变量,那样对原矩阵不会做任何改动。

四、矩阵的拼接与扩展(主要借助逗号、分号的灵活使用,很重要)

1.行向量拼接

在A矩阵的最下方扩展一行,加入行向量v,先对A和v进行定义,新矩阵B=[A;v]。

A =

     1     2     3
     4     5     6
     7     8     9

>> v = [11,12,13];B = [A;v]

B =

     1     2     3
     4     5     6
     7     8     9
    11    12    13

2.列向量拼接

使用逗号进行分隔,新矩阵B = [A,v],注意维数要相符合。

A =

     1     2     3
     4     5     6
     7     8     9

>> v = [11,12,13]';B = [A,v]

B =

     1     2     3    11
     4     5     6    12
     7     8     9    13

3.习题一道

在任意矩阵A的第二列和第三列之间插入列向量v。

五、向量/矩阵的代数运算

1.转置

在本章第一部分的向量中已经介绍了转置符号,还有独立的函数transpose()来转置,用的很少就是了,二者效果是一样的。

A =

     1     2     3
     4     5     6
     7     8     9

>> B = A'

B =

     1     4     7
     2     5     8
     3     6     9

>> C = transpose(A)

C =

     1     4     7
     2     5     8
     3     6     9

2.加减法运算

直接相加减,像现实一样,注意向量或者矩阵的维数要相同。

3.矩阵的数乘

直接乘,要求前一个矩阵的列数和下一个矩阵的行数相等,其余规则类似于C语言,为了方便与点乘区分,这里放一块代码。

>> A = rand(3,4);B = rand(4,5);C = A*B

C =

    0.9268    1.0472    1.2190    0.3052    0.8759
    0.3645    0.9114    0.8051    0.3273    1.2485
    1.2721    1.3841    1.4832    0.4615    1.2813

4.矩阵的翻转(使用函数)

1.左右翻转:fliplr(A)即对A进行左右翻转;
2.上下翻转:flipud(A);
3.逆时针旋转90度:rot90(A);

5.矩阵的乘方运算

即矩阵A的n次方,输入B=A^n。

6.矩阵的点运算

和数乘的基本规则不同,点运算是对应位置元素直接运算。主要分为点加减,点除和点乘和点方(表示矩阵每一位的数各自平方。格式为:A.^2)。基本格式为C = A.+(+可以由其他运算符代替)B。例如,点乘运算为两个矩阵的对应元素两两相乘。但是要注意,两个矩阵维数要完全相同,否则会报错。这里以点乘为例:

>> A = rand(3);B = rand(3);C = A.*B

C =

    0.2047    0.4633    0.1174
    0.2596    0.3796    0.0416
    0.0174    0.0373    0.1655

六、矩阵的逻辑运算(基本和C语言的逻辑运算方式相同,表达式稍有不同)

1.矩阵的与运算

用符号&表示矩阵的与运算,A&B表示对A和B相应元素进行与运算(显然二者的维数要相同),如果两个相应元素均非0,则对应位置与运算结果为1,否则为0

>> A

A =

     1     0     1
     0     1     1
     2     1     0

>> B

B =

     2     2     0
     0     1     1
     0     1     0

>> C = A&B

C =

  3×3 logical 数组

   1   0   0
   0   1   1
   0   1   0

2.矩阵的或运算

如果两个相应元素存在非0值,则这两个元素与运算的结果为1,否则为0。该运算符号为“|”。学习者自行尝试,不再放入代码。

3.矩阵的非运算

如果元素为0,非运算结果为1,如果不为0,非运算结果为0,这个运算是一元的,符号为“~”

>> A

A =

     1     0     1
     0     1     1
     2     1     0

>> C = ~A

C =

  3×3 logical 数组

   0   1   0
   1   0   0
   0   0   1

4.矩阵的异或运算

xor(A,B)表示A和B相应元素的异或运算,如果两个相应元素一个为0,一个非0,则这两个元素异或运算的结果为1,否则为0。

>> A

A =

     1     0     1
     0     1     1
     2     1     0

>> B

B =

     2     2     0
     0     1     1
     0     1     0

>> C = xor(A,B)

C =

  3×3 logical 数组

   0   1   1
   0   0   0
   1   0   0

七、矩阵的比较运算及数值查询

1.比较运算符号

大于>,小于<,等于==,大于等于>=,小于等于<=,不等于~=。
不同比较运算符可以混合使用:譬如C=A>=B,如果A的对应值大于B的对应值,对C的对应值赋值为1,否则赋值为0。可见比较运算可以作为逻辑运算的补充。

2.矩阵比较运算用法

常与find()函数配合使用,find()函数可以用于查询出满足某关系的数组下标。例如:[m,n]=find(A>=5),可以找出矩阵A中大于等于5的元素的位置,满足条件元素的行下标存储在向量m中,列下标存储在向量n中,运行示例如图:

A =

     1     2     3
     4     5     6
     7     8     9

>> [m,n] = find(A>=5)

m =

     3
     2
     3
     2
     3


n =

     1
     2
     2
     3
     3

还可以用[m,n]=find(is某个字符(A)),给出A中元素和该字符相符的元素的下标。

八、矩阵分析

1.行列式

det(A),直接获取A的行列式

>> A

A =

     1     2     3
     4     5     6
     7     8     9

>> a = det(A)

a =

  -9.5162e-16

2.矩阵的迹

对角元素之和。使用函数trace(A)来生成,当然也可以提取子元素暴力相加。

A =

     1     2     3
     4     5     6
     7     8     9

>> a = trace(A)

a =

    15

3.矩阵的秩

矩阵中线性无关向量的最大个数。用函数rank(A)来获取。

4.矩阵的逆

利用函数inv(A)求解矩阵A的逆矩阵。

A =

     1     2     3
     4     5     6
     7     8     9
>> B = inv(A)
B =

   1.0e+16 *

    0.3153   -0.6305    0.3153
   -0.6305    1.2610   -0.6305
    0.3153   -0.6305    0.3153

5.特征值与特征向量

利用函数[V,D]=eig(A)来求解矩阵A的特征值和特征向量,其中D为对角矩阵,对角线元素即为A的特征值,矩阵V的各列即为各特征值对应的特征向量。

A =

     1     2     3
     4     5     6
     7     8     9

>> [V,D] = eig(A)

V =

   -0.2320   -0.7858    0.4082
   -0.5253   -0.0868   -0.8165
   -0.8187    0.6123    0.4082


D =

   16.1168         0         0
         0   -1.1168         0
         0         0   -0.0000

九、复数的生成与矩阵详解

第一章简单介绍过matlab中复数的表示方式:和现实中一样。倘若需要一个复数矩阵,一点一点输入多个实部和虚部数据太过于繁琐。在后来我在矩阵这一章对这一部分做出了补充:
首先要补充一个非常重要的函数:complex(x,y),x和y分别为复数的实部和虚部,可以用这个函数来生成一个复数,如代码块所示:

>> x = complex(1,2)

x =

   1.0000 + 2.0000i

所以呢,我们可以适当联想,x和y处的数据不单单可以是数据,还可以是小数或者整数矩阵(当然啦,x和y矩阵的维数必须相同,不然“穿不到一条裤子里”):

>> x = [1,2,3;4,5,6;7,8,9];
>> y = [0.1,0.2,0.3;0.4,0.5,0.6;0.7,0.8,0.9];
>> z = complex(x,y)

z =12

   1.0000 + 0.1000i   2.0000 + 0.2000i   3.0000 + 0.3000i 
   4.0000 + 0.4000i   5.0000 + 0.5000i   6.0000 + 0.6000i
   7.0000 + 0.7000i   8.0000 + 0.8000i   9.0000 + 0.9000i

本章的内容到此结束,倘若你有问题,请及时在评论区留言反馈。下章预告:基础图像绘制。倘若你觉得写得不错,可以关注我或者收藏本系列,只要有空就会更新下去的哦!!!!

本章节更新记录

2024.2.14首次发布。
2024.2.14优化了排版方式,更加便于查阅。
2024.2.15补充了复数矩阵的生成方式
[1]:参考文献:Matlab官网Mathworks-帮助中心文章来源地址https://www.toymoban.com/news/detail-834027.html

到了这里,关于【Matlab入门】 第二章 向量和矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【UnityShader入门精要学习笔记】第二章(3)章节答疑

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (PS:章节答疑不是我答,是原作者对一些比较容易产生困惑的地

    2024年02月03日
    浏览(45)
  • 《MetaGPT智能体开发入门》学习笔记 第一章第二章

    使用从 - 通过github仓库获取MetaGPT 代码拉下来后在config文件夹中配置chatGPT key 使用的python环境为3.9.2 metaGPT代码下载后在metagpt文件夹中找statup.py文件,运行以下命令,我是没有成功可能是chatgpt没钱 智能体 = LLM+观察+思考+行动+记忆 多智能体 = 智能体+环境+SOP+评审+路由+订阅+经

    2024年01月17日
    浏览(46)
  • 【UnityShader入门精要学习笔记】第二章(2)GPU流水线

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 在上节笔记中,我们学习了图像渲染流水线的基本过程,从应用

    2024年02月22日
    浏览(34)
  • 【UnityShader入门精要学习笔记】第二章(1)了解渲染流水线

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 什么是流水线?书中举了一个生产洋娃娃的例子。一个洋娃娃的

    2024年01月25日
    浏览(32)
  • 线性代数 第二章 矩阵

    一、概念 个数排成的m行n列的表格 二、运算法则 三、初等变换 (1)用非零常数k乘矩阵的某一行(列); (2)互换矩阵某两行(列)的位置; (3)把某行(列)的k倍加至另一行(列)。 称为矩阵的 初等行(列)变换 ,统称 初等变换 。矩阵经初等行变换后秩不变。 初等

    2024年02月08日
    浏览(34)
  • 线代第二章 矩阵 +行列式与矩阵的区别

    行列式与矩阵的区别 一、 行列式是一个数,矩阵是一个表格。 (行列式都是n阶的方阵,但矩阵不一定是方阵An×n,也可以是Am×n) 只有n阶矩阵An×n:才有对应的行列式|A|,才能计算对应行列式的模。 二、 行列式的性质:    P201 行列式的某行(或列)有公因子k,则可把k提出

    2023年04月08日
    浏览(35)
  • 线性代数第二章矩阵及其运算详解

    一.线性方程组和矩阵 1.概念 如图所示,该矩阵称为 m行n列矩阵 若行数和列数都等于n,则该矩阵称为 n阶方阵 两个矩阵的行数相等,列数也相等,就称它们为 同型矩阵 若A=(aij)和B=(bij)是同型矩阵,且aij=bij(i=1,2,...,m;j=1,2,...,n),则称 矩阵A与矩阵B相等 ,记作 A=B 2.特殊

    2024年01月25日
    浏览(40)
  • 线性代数(基础篇):第一章:行列式 、第二章:矩阵

    1. A可逆 ⇦⇨①|A|≠0 ⇦⇨②r(A)=n,A满秩 ⇦⇨③A的列向量 α₁,α₂,…α n 线性无关 ⇦⇨④Ax=0仅有零解 (系数矩阵的秩 = 列数,列满秩) ⇦⇨⑤ A的特征值均不为0 【17年5.】 2.  A不可逆 ⇦⇨①|A|=0 ⇦⇨②r(A)n,A不满秩 ⇦⇨③A的列向量 α₁,α₂,…α n 线性相关 ⇦⇨④Ax=0有非

    2024年02月16日
    浏览(39)
  • 从零开始学数据分析之——《线性代数》第二章 矩阵

    元素全为实数的矩阵称为实矩阵  元素全为负数的矩阵称为复矩阵 只有一行(列)的矩阵称为行(列)矩阵 元素全为零的矩阵称为零矩阵 行数和列数都等于n的矩阵称为n阶矩阵或n阶方阵 主对角线元素全为1,其余元素全为0的矩阵称为单位矩阵,记作E或I 两个矩阵行数和列数

    2023年04月23日
    浏览(38)
  • KALI入门到高级【第二章】

    第一章 入门 1.1 什么是Kali Linux? 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 特权升级 1.5 远程访问 1.6 数据包嗅探和欺骗

    2024年02月05日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包