【MATLAB学习笔记】1:基本操作技巧和矩阵的使用

特殊变量和常量

使用iskeyword命令可以看到众关键字,但还有些特殊变量和常量也不能作为标识符来使用。

  • ans:最近一次计算的结果
  • i,j:用于表示复数
  • Inf(即inf):无穷大,试计算1/0log(0)将分别得到正负无穷大
  • eps:表示浮点数的相对精度,浮点数越靠近0精度越大,MATLAB无法表示1至1+1eps之间的数,也无法表示2至2+2eps之间的数
  • NaN:Not a Number,试计算Inf/Inf
  • pi:圆周率

常用技巧

help

使用help后跟要用的方法,可以显示其简要使用信息,要查询详细使用方式可以在右上角搜索文档。

clear

使用clear后跟变量名可以将指定变量从workspace清除,也可以在右上角工作区右击删除。如果直接使用clear将清空工作区所有变量。

format

使用format后根具体的数值类型,可以修改控制台输出显示的数值精度。如piformat long下显示为3.141592653589793。

  • short:小数点后4位
  • long:对double数小数点后15位,对single数则是小数点后7位
  • shortE:short的科学计数法
  • longE:long的科学计数法
  • bank:小数点后2位
  • hex:对double数的二进制的16进制表示
  • rat:用小分子分母表示的分数(可以将无理数表示成近似的有理数的分数表示,也常用于分数运算希望得到的结果也是分数)
行尾分号

在交互环境下行尾使用分号;表示不打印计算结果,当计算结果很大时(比如数字图像处理得到图像矩阵),打印会很耗时。

who和whos

使用who查看工作区变量,使用whos查看工作区变量的详细信息。实际可以直接在右上角工作区查看,更加方便。

clc

清屏,但不会影响到工作区。

数组(向量和矩阵)

行向量
a = [1 2 3 4]
列向量
b = [1;2;3;4]
矩阵乘法

这里的行向量和列向量实际上都是某个维度为1的矩阵,和矩阵乘法无二。

>> a*b

ans =

    30

>> b*a

ans =

     1     2     3     4
     2     4     6     8
     3     6     9    12
     4     8    12    16
矩阵
>> A=[1 21 6;5 17 9;31 2 7]

A =

     1    21     6
     5    17     9
    31     2     7
索引

注意MATLAB的索引是从1开始的,而不是从0开始的,并且使用()而不是[]来做索引。下面以前面的矩阵A为例子。

取第1行第2列
>> A(1,2)

ans =

    21
取第1第3行的第2第3列
>> A([1 3],[2 3])

ans =

    21     6
     2     7
取flatten后的第4个元素

特别注意,MATLAB的flatten先纵再横,而不是先横着数再纵着数。

>> A(4)

ans =

    21
取flatten后的第1,3,5个元素
>> A([1 3 5])

ans =

     1    31    17
取flatten后的第1,3个元素两行
>> A([1 3;1 3])

ans =

     1    31
     1    31
Colon Operator

这里直译过来是冒号操作,可以用来生成一系列的连续数,更进一步也就可以实现切片索引了。

从下面例子中可以看到,第一个数表示起始数,最后一个数表示最多可到达的数,中间的数表示step,默认step为1。

>> B=[1:6]

B =

     1     2     3     4     5     6

>> C=[1:2:6]

C =

     1     3     5

>> C=[1:2:5]

C =

     1     3     5

还可以用来生成字符串:

>> str = 'a':2:'z'

str =

acegikmoqsuwy

用于对矩阵做切片,如取A的第三行:

>> A(3,:)

ans =

    31     2     7

若要将某行或某列删除,只要将空向量赋值给它,如删除A的第三列,只要A(:,3)=[]即可。

Array Concatenation

可以方便地将多个矩阵拼接在一起,如:

>> A=[1 2;3 4]

A =

     1     2
     3     4

>> B=[9 9;9 9]

B =

     9     9
     9     9

>> C=[5 6 7 8]

C =

     5     6     7     8

>> D=[-2 -1 0 1]

D =

    -2    -1     0     1

>> E=[A B;C;D]

E =

     1     2     9     9
     3     4     9     9
     5     6     7     8
    -2    -1     0     1
Array Manipulation

矩阵之间可以进行四则运算,假设有这样两个矩阵A和B:

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

A =

     1     2     3
     4     5     6
     7     8     9


>> B=[2 2 2;2 2 2;2 2 2]

B =

     2     2     2
     2     2     2
     2     2     2

以及一个常量a:

>> a=2

a =

     2
矩阵加减法
>> A+B

ans =

     3     4     5
     6     7     8
     9    10    11

>> A-B

ans =

    -1     0     1
     2     3     4
     5     6     7
次方

次方操作相当于在做这么多个矩阵乘法:

>> A^2

ans =

    30    36    42
    66    81    96
   102   126   150

>> A*A

ans =

    30    36    42
    66    81    96
   102   126   150

如果希望对每个元素作此操作,而不是对整个矩阵,即若希望是element-wise的形式,要加个.号:

>> A.^2

ans =

     1     4     9
    16    25    36
    49    64    81
哈达玛积

基于前面的element-wise显然可以这样表示哈达玛积(对应元素相乘):

>> A.*B

ans =

     2     4     6
     8    10    12
    14    16    18

类似地,有:

>> A./B

ans =

    0.5000    1.0000    1.5000
    2.0000    2.5000    3.0000
    3.5000    4.0000    4.5000
转置

使用'符号对矩阵转置:

>> A'

ans =

     1     4     7
     2     5     8
     3     6     9
矩阵逆和矩阵除法

为了求逆,让B是一个可逆矩阵,然后求逆,使用inv()操作即可。而矩阵除法A/B实际就是让A右乘B的逆矩阵:

>> B=[1 2 3;0 1 4;5 6 0]

B =

     1     2     3
     0     1     4
     5     6     0

>> A/B

ans =

    1.0000    0.0000    0.0000
  -26.0000   21.0000    6.0000
  -53.0000   42.0000   12.0000

>> A*inv(B)

ans =

    1.0000    0.0000    0.0000
  -26.0000   21.0000    6.0000
  -53.0000   42.0000   12.0000

此外,矩阵除法B\A则是让A左乘B的逆矩阵:

>> B\A

ans =

   83.0000   82.0000   81.0000
  -68.0000  -67.0000  -66.0000
   18.0000   18.0000   18.0000

>> inv(B)*A

ans =

   83.0000   82.0000   81.0000
  -68.0000  -67.0000  -66.0000
   18.0000   18.0000   18.0000
伪逆

对于奇异矩阵(不可逆的方阵),可以用pinv()操作求其伪逆。

生成一些特殊的矩阵
  • linspace:一定区间内的等差数列向量
  • eye:指定阶的单位阵
  • zeros:指定维度的全0矩阵
  • ones:指定维度的全1矩阵
  • diag:对角方阵
  • rand:指定维度的平均随机数矩阵
矩阵上的一些函数操作
  • max(A):每一列中最大的值,有多少列得到的向量中就有多少个数
  • max(max(A)):矩阵中的最大元素
  • min(A):每一列中最小的值,有多少列得到的向量中就有多少个数
  • min(min(A)):矩阵中的最小元素
  • sum(A):每一列上所有元素加起来,有多少列得到的向量中就有多少个数
  • sum(sum(A)):矩阵中所有元素求和
  • mean(A):每一列上所有元素求平均,有多少列得到的向量中就有多少个数
  • mean(mean(A)):矩阵中所有元素求平均
  • sort(A):对每一列从小到大排序
  • sortrows(A,k):按照第k列的元素大小,对矩阵的所有行进行排序,此操作不会改变行内元素顺序
  • size(A):矩阵的shape
  • length(A):矩阵的长度(最后一个维度,二维即是列的数目)
  • find(A==k):矩阵中等于k的元素位置的标号组成的列向量(位置标号是按列flatten后的从1开始的索引号)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值