数组
矩阵
定义方法:
- 按行输入矩阵元素构造矩阵
- 冒号运算符构造向量和矩阵
x= 1:10 ---> 相当于 x = 1 2 3 4 5 6 7 8 9 10
y= 1:2:10 y从1到10 取第2个数 相当于 y=1 3 5 7 9
x= 初值:步长:终值
3. linspace函数生成等间隔向量:x = linspace(初值,终值,向量长度)
4. 定义复数矩阵:A =[ 1 2 ;3 4]; B = [5 6 ; 7 8]; c= complex( A, B) c是以A为实部,B为虚部生成的复数矩阵
相关函数及操作
- Size返回矩阵的行数和列数 x为一矩阵 size(x) ans= 行数 列数
- y=x(a:b,c:d) 提取矩阵x第a行到第b行,第c列到第d列的元素
- y=( : , c:d) 提取第c列到第d列的元素
- y = x ( :)' 将x矩阵拉长,转置为行向量
- 矩阵变形
- reshape(x, [a,b])将原有的x矩阵变成 a行 b列的新矩阵
- repmat (x, [a,b])
矩阵函数
特殊矩阵函数
函数名 | 调用格式 | 说明 |
zeros | B = zeros(n) | n*n零矩阵 |
B = zeros(m,n)或zeros([m,n]) | m*n零矩阵 | |
B = zeros(m,n,p,...)或zeros([m,n,p,...]) | m*n*p*...零矩阵/数组 | |
B = zeros(size(A)) | 与A大小相同的零矩阵 | |
ones | B = ones(n) | n*n "1"矩阵 |
B = ones(m,n)或ones([m,n]) | m*n "1"矩阵 | |
B = ones(m,n,p,...)或ones([m,n,p,...]) | m*n*p*..."1"矩阵/数组 | |
B = ones(size(A)) | 与A大小相同的"1"矩阵 | |
eye | B = eye(n) | n*n 单位矩阵 |
B = eye(m,n)或eye([m,n]) | m*n 单位矩阵 | |
diag | X = diag(v, k ) | 以向量v为第k个对角线生成对角矩阵 |
X = diag(v) | 以向量v为主对角元素生成对角矩阵 | |
v = diag(X,k) | 返回矩阵X的第k条对角线元素 | |
v = diag(X) | 返回矩阵X的主对角线元素 | |
rand | B = rand | 均匀分布的随机数矩阵 |
B = rand(n) | n*n 随机数矩阵 | |
B = rand(m,n)或 rand ([m,n]) | m*n 随机数矩阵 | |
B = rand(m,n,p,...)或 rand([m,n,p,...]) | m*n*p*... 随机数矩阵/数组 | |
B = rand(size(A)) | 与A大小相同的随机数矩阵 | |
magic | M = magic (n) | n*n 魔方矩阵 |
魔方矩阵:n阶魔方矩阵,将n^2 个数填入 n 行 n 列之中,使得每行、每列、两条对角线之和 都等于 n(n^2+1)/2
矩阵算术运算
- 加减
- 乘法
- 直接相乘 A*B; 要求:前面矩阵的列数等于后面矩阵的行数
- 点乘 A.* B ; 要求:同型矩阵
- 除法
- 左除 A\B, x= A\B 是Ax=B的解
- 右除 A/ B, x = A/ B 是xA = B 的解
- 点除 A./B, x = A./B 表示同型矩阵A、B对应元素相除
- 乘方
- 要求:必须是方阵
- 三种情况 (A为方阵)
- x为正整数, A ^x --> A自乘 x次
- x 为负整数, A ^x --> A的逆阵 自乘 x 次
- x为分数, x=m/n, A^x -->A先自乘m次,再对结果矩阵内的每一个元素开n次方
- 点乘方
- 要求:不要求是方阵
- 两种情况
- A为矩阵,x为标量: A.^x -->对A中的每一个元素求x次方
- A 和 x 为同型矩阵, A.^ x --> 对A中的每一个元素求x中对应元素次方
矩阵关系运算
- 大于>
- 小于<
- 大于等于>=
- 等于==
- 不等于~=
矩阵的逻辑运算
逻辑运算类型 | 运算符 | 含义 |
“或”: A|B | “|” | 同型矩阵A和B的或运算,若A和B的对应元素至少有一个非0,则相应的结果元素值为1(真),否则为0(假) |
“与”: A& B | “&” | A和B 的对应元素均非0,为1(真),否则0(假) |
”非“ ~A | “~” | 若A的元素值为0, 则相应结果为1,否则为0 |
“异或” xor(A,B) | xor() | A和B对应的元素均为0 或者非0, 则相应结果元素值为0,否则为1 |
先决或 A||B | “||” | A非0时,结果为1,不用再执行A和B的逻辑或运算; A为0时,执行A和B的逻辑或运算 即A|B |
先决与运算 A&&B | “&&” | A为0时,结果为0,不在执行A和B的逻辑与运算; A非0时,继续执行A和B 的逻辑与运算 即A&B |
矩阵的其他运算
运算 | 表达式 |
转置 | A' |
翻转 |
|
行列式 | det(A) |
逆矩阵 | inv(A),A为方阵(可以是数值型矩阵 or 符号型矩阵) |
广义逆矩阵 | pinv(A),A可以不是方阵 |
迹 | trace(A) |
秩 | rank(A) |
特征值及特征向量
eig(A) | 求A的特征值 |
eig(A,B) | A,B的广义特征值 |
[ V,D ] =eig(A) | 求方阵A的特征值矩阵 D 和特征向量矩阵 V ,且满足 AV = VD |
[ V ,D ] = eig(A, 'nobalance') | A中有较小元素,且其值接近舍入误差时,nobalance可以让结果更加精确 |
[ V, D ] = eig(A, B ) | 求广义特征值矩阵D与广义特征向量矩阵V,满足AV = BVD |
[ V , D ] = eig(A, B, flag ) | 用给定算法(flag参数用于指定算法)来求广义特征值矩阵D与广义特征向量矩阵V,满足AV = BVD |
高维数组
- 直接赋值定义
- 利用car函数定义三维数组
- A1 = [1 2; 3 4]; A2 = [5 6 ; 7 8 ]; A =cat(3 ,A1, A2)
- reshape (a : b, [ c, d ,e]) 定义一个三维数组
结构体数组
structure('field1' , values1 ,'field2', values2, …)
Structure('field1' ,{ values1,values2, …} ,'field2', { values3, values4, …}, …)
元胞数组 --可以将不同类型、不同大小的数组放在一个数组
- 定义:
- 直接赋值定义:
- cell函数定义:
cell(n) | n*n的空元胞数组 |
cell(m,n) 或 cell([m, n ]) | m*n的空元胞数组 |
cell(m, n, p, …) | m*n*p*…的空元胞数组 |
cell(size(A)) | 生成和矩阵A相同大小的空元胞数组 |
- 2. 访问:
- C ( i,j) --> 元胞数组C的第 i 行第 j 列的元胞
- C{ i,j } --> 访问元胞数组C的 第 i 行第 j 列的元胞里的元素
- celldisp函数显示元胞数组的所有内容
数组转换
函数 | 含义 |
mat2cell(矩阵,[行分割方式], [列分割方式) | 将矩阵分块转换为元胞数组 |
cell2mat(元胞数组) | 元胞数组转换为矩阵 |
num2cell(数值数组) | 数值型数组转换为元胞 |
cell2struct(元胞数组,fields,n) | 元胞数组转换为n*1的结构数组 |
struct2cell(结构数组) | 结构数组转换为元胞数组 |