MatLab之数组篇

小记:MatLab中一般是写一条运行一条,会直接出结果在窗口上,若要不显示则在语句后加上分号< ; >

想写几串就直接在语句后面< ; >后接着写就是了。

一些基础知识


预定义变量

注:优先级低于被定义的变量,例如定义i = 1,则之后的i都为1,无法作为虚数单位

数据类型

注:在MATLAB中可以直接输入一个值,它会直接被赋给ans,即answer

约位

  • ceil() : 向上取整

  • floor() : 向下取整

  • round() : 四舍五入

  • fix():去除小数部分

复数及其运算

用 i 和 j 都可以表示虚数单位,函数:

获取实部 real(),虚部 imag(),辐角主值 angle(), 模 abs(),共轭 conj()


数组创建

一维数组创建

行向量创建

(1) 逐一输入:用方括号“[ ]”操作符,所有向量元素必须在“[ ]”之内;用空格或逗点< , >隔开。

(2) 用冒号< : >操作符

格式:x= 首 : 步长值 : 尾

  • 等差数列,起始为首
1
2
3
4
5
6
>> x=1:5
x =
1 2 3 4 5
>> x=1:2:6
x =
1 3 5

(3) 利用函数linspace

x=linspace(首 , 尾 , 元素个数)

  • 元素个数不写则默认为100
1
2
3
>> x = linspace(10,5,6)
x =
10 9 8 7 6 5

列向量创建

  • 在行向量后加转置符号',注意转置符号包括转置+共轭(即复数变成其共轭),因此.'用来完成单纯的转置。

二维数组创建

  • 手搓法 :行内元素用空格隔开,行之间用分号< ; >隔开。

  • 函数法 :

  1. ones(i,j)——生成 i 行 j 列的全1矩阵 eg. ones(3)=ones(3,3)

  2. zeros()——生成全0矩阵

  3. reshape(a,i,j)——把 a 重塑成 i 行 j 列的矩阵,元素个数不变,数组元素从上到下按列排列

  4. eye()——产生单位矩阵

  5. magic()——产生魔方阵,即每行每列和对角线的和都相等

  6. rand()——产生0~1间均匀分布的随机矩阵

  7. randn()——产生均值为0,方差为1的标准正态分布随机矩阵

  8. diag(A)——若A是一个m个元素的向量,则产生一个m×m的对角阵,其对角元为A的各元素

    ​ 若A是m×m矩阵,则产生一个m维列向量,由A的对角元组成

    diag(A,k)——结果体现在第k条对角线(k为正则向上数,反之)


三维数组创建

  • 直接法:分别输入三维数组的每一层的数,组合成一个三维的
1
2
3
4
5
6
>>a(:,:,1) = [1 2 3];
>>a(:,:,2) = [4 5 6]
a(:,:,1) =
1 2 3
a(:,:,2) =
4 5 6
  • cat拼接法:利用cat函数把两个同阶级的二维数组按顺序拼接成三维数组

    eg. cat(3,A,B)


有用的空数组

  • 有一维是0的数组,所以空数组不全是0

  • 空数组不占据存储空间

  • 0x0 ,0x5 ,10x0

  • 用于删除矩阵的某一行或列

    1
    2
    3
    4
    5
    6
    7
    8
    9
    A =
    9 1 7 0
    4 4 9 8
    8 9 6 9
    >> A(:,[2 4])=[]
    A =
    9 7
    4 9
    8 6

    上面可以看到我们先选中A的所有行,再选中第2和第4列,将他们变成空数组,即删除这两列。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    A =
    7 1 5 6 1
    7 1 2 8 2
    2 4 7 9 8
    6 9 2 5 2
    6 3 5 1 8
    >> A(1:3,:)=[]
    A =
    6 9 2 5 2
    6 3 5 1 8

    上面可以看到我们先选中了1~3行,再选中其中所有列,进行删除。


数组的运算

前加点的即为矩阵的对应各个元素进行单独运算

运算 运算符 含义说明
+ 对应元素相加
- 对应元素相减
* 正常矩阵乘法
点乘 .* 对应元素相乘(阶数相同)
^ 正常矩阵幂运算
点幂 .^ 每个元素各自幂运算
左除或右除 \ 或 / 矩阵相除,一般A/B≠B\A,毕竟矩阵乘法不满足交换律
左点除或右点除 .\ 或 ./ 矩阵对应元素相除

注意:若矩阵与单个数(即标量)进行加减运算时,是每个元素都与这个数加减,因为在MATLAB中没有单位矩阵E的定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
A =  
1 2 3
4 5 6
7 8 9
B =
2 2 2
2 2 2
2 2 2

>> A.*B
ans =
2 4 6
8 10 12
14 16 18

>> A^2
ans =
30 36 42
66 81 96
102 126 150

>> A.^2
ans =

1 4 9
16 25 36
49 64 81

关系运算

​ < >= <= == ~=(不等于)

1、两个数比较时,直接比,成立为1,不成立为0

2、维数相等矩阵比较,对应位置数比较,并在对应位置得到结果,最后组成一个维数相等的0、1矩阵

3、矩阵与数比较时,矩阵各个元素与这个数比较,并在各自位置得到结果,得到0、1矩阵

逻辑运算

&(与)、 |(或)、 ~(非)


数据统计与处理

一维向量

  • y=max(x):求向量x的最大值,若有复数则按模取最大

  • [y,l]=max(x):求向量x的最大值及其该元素的位置(位置永远是从上向下的位置)

  • max(A):得到一个行向量,由A的每列的最大值对应组成

  • [Y,U]=max(A):得到行向量Y和U,Y由每列最大值组成,U由每列最大值的行号组成

  • max(A,[ ],dim):dim=1或2。dim=1时,与max(A)相同;dim=2时,得到一个列向量,由每行最大值组成

求和:sum(A)——得到行向量,由每列的和组成

求积:prod(A)——得到行向量,由每列的积组成

求中值:median(A)——得到行向量,由每列的中值组成

二维矩阵

1
2
a = max(X)	# 求最大值,当a是矩阵时,每列求最大
[a,b] = max(X) # 得到最大值a和其下标b

max(A,B)指的是同型矩阵A和B对应元素最大值组成的新矩阵,因此我们可以用max(A , [ ] , 2)来求出A每行的最大值

1
2
3
4
mean(X)		% 每列均值
mean(X,2) % 每行均值
median(X) % 每列中值
median(X,2) % 每行中值
  • 排序
1
sort(A,dim,method)	% dim默认为1按列,为2时按行,method默认为升序'ascend'

sum()prod():求和,求积同上

cumsum()cumprod():累加累乘用法同上,效果就是后面的加上前面的总和


多项式

  • 创建
1
a = [1,2,3,4]	# 相当于𝑥^3+2𝑥^2+3𝑥+4,计算时用a
  • 代入求值
1
y = polyval(a,代入的值)	# 值可以是具体数字也可以是变量,若是矩阵则每个元素都代入算一遍
  • 求根
1
2
r = roots(a)	# 在复数域上求根,得到一个矩阵(几元方程就有几个根)
a = poly(r) # 利用根的矩阵求系数矩阵