一.数组(向量和矩阵)
1.手动输入数组
(1)所有MATLAB变量都是数组:
·这意味着每个变量均可以包含多个元素
·单个称为标量的数值实际上是一个1×1数组
(2)创建数组:
#用空格/","分隔的值会被组合为行向量
>> x = [ a b ... ]
>> x = [ a , b ... ]
>> x = [ 7 9 ]
x =
7 9
#如果行向量组中是String类型,生成数组后2个变量间没有空格
>> s1 = 'Example';
>> s2 = 'String';
>> s3 = [s1 s2]
s3 =
ExampleString
#用";"分割的值会被组合为列向量
>> x = [ a ; b ... ]
>> x = [ 7 ; 9 ]
x =
7
9
#如果列向量组中是String,要求上下2个变量中字符数相等
>> s4 = [s1;s2]
Error using vertcat
Dimensions of matrices being concatenated are not consistent.
>> s4 = [s1;s1]
s4 =
Example
Example
#综合使用行/列向量
>> x = [x11 x12 ... ; x21 x22 ... ; ...]
>> x = [ 3 4 5 ; 6 7 8 ]
x =
3 4 5
6 7 8
#合并矩阵
>> x = [M11 M12 ... ; M21 M22 ...]
>> x1 = [1 2 ; 3 4];
>> x2 = [5 ; 6];
>> xc = [x1 x2]
xc =
1 2 5
3 4 6
>> xr = [x1 ; x2]
xr =
1 2
3 4
5 6
>> A = [1 2;3 4];
>> B = [9 9;9 9];
>> C = [5 6 7 8];
>> D =[-2 -1 0 -1];
>> F = [A B ; C ; D]
F =
1 2 9 9
3 4 9 9
5 6 7 8
-2 -1 0 -1
(3)可以在[ ]内执行计算:
>> x = [ abs(-4) 4^2 ]
x =
4 16
>> x = [ sqrt(10) pi^2 ]
x =
3.1623 9.8696
2.创建等间距向量
(1)已知间距:
x = first : step : last
#注意不加[]
#step可选,默认为1
>> x = 1 : 3
x =
1 2 3
>> x = 1 : 0.5 : 5
x =
1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000
#用于生成矩阵
A = [1 : 5;2 : 3 : 15;- 2 : 0.5 : 0];
#用于字符串:
str = 'a' : 2 : 'z';
(2)已知元素个数:
x = linspace(first,last,number)
#参数说明:
number:数组中总共有几个元素;默认为100
>> x = linspace(0,1,5)
x =
0 0.250 0.500 0.750 1.000
3.利用内置函数创建函数
(1)创建随机数矩阵:
x = rand(m,n):返回一个由随机数构成的m*n的矩阵
#若只传入一个参数m,创建一个m阶方阵
>> x = rand(2)
x =
0.8147 0.1270
0.9058 0.9134
>> x = rand(2,3)
x =
0.6324 0.2785 0.9575
0.0975 0.5469 0.9649
(2)创建0矩阵:
x = zeros(m,n):返回一个m*n的零矩阵
#若只传入一个参数m,创建一个m阶零方阵
>> x = zeros(3,2)
x =
0 0
0 0
0 0
(3)创建1矩阵:
ones(m,n):返回1个m*n的矩阵,每个元素均为1
(4)创建对角矩阵:
diag(A):创建1个以A中元素为元素的对角矩阵
#参数说明:
A:1个向量,结果中的x~ii即为A中的a~i
>> diag([1 2 3 4])
ans =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
(5)创建单位矩阵:
eye(n):返回1个n阶单位矩阵
二.索引和修改数组
1.对数组进行索引:
a = M(row,col):返回数组M中第row行第col列的元素
#编号从1开始
#end指最后一行/列;可将算术运算与end结合使用,end-1指倒数第二行
#冒号(:)指代该维度的所有元素
#m:n指该维度中[m,n]范围内的所有元素
>> data = [1 2 3;4 5 6]
>> v = data(2,2)
v =
5
>> v = data(end,end)
v =
6
>> v = data(end-1,1)
v =
1
>> density = data(:,2)
density =
2
5
>> volumes = data(:,end-1:end)
volumes =
2 3
5 6
a = M(row,col):返回M的子块,行由向量row确定,列由向量col确定
>> A = [1 21 6;5 17 9;31 2 7];
>> M = A([1 3],[1 3])#即row1,row3,col1,col3构成的子块
M =
1 6
31 7
a = v(x):向量v的第x个元素
#v需为行/列向量,不得为二维及以上的数组
#m:n为向量[m,n]范围内的所有元素
>> p = density(2)
p =
5
>> p = density(1:2)
p =
2
5
a = M(x):返回矩阵M的第x个元素
#编号从第1列第1行开始,向下直到最后1行;再继续为第2列编号;以此类推
#编号矩阵:MI = [1 n + 1 ...;2 n + 2 ...;...;n 2n ...]
>> A = [1 21 6;5 17 9;31 2 7];
>> a = A(8)
a =
9
#向量/矩阵作为索引,返回将对应元素放在对应位置构成的矩阵
>> A = [1 21 6;5 17 9;31 2 7];
>> A1 = A([1 3 5])
A1 =
1 31 17
>> A2 = A([1 3;1 2])
A2 =
1 31
1 5
2.更改数组中的值:
M(x,y) = m:将数组M中x行y列的元素修改为m
a(x) = m:将向量a的第x个元素修改为m
>> a = [1 2 3]
a =
1 2 3
>> a(2) = 0.5
a =
1 0.5 3
3.删除某行/列:
A(m,:) = []:删除第m行
A(:,n) = []:删除第n列
>> A = [1 76 6;5 17 9;31 2 7];
>> A(3,:) = []
A =
1 76 6
5 17 9
>> A(:,2) = []
A =
1 6
5 9
三.数组运算
1.加减乘除:
>> v1 = [1;2;3];
>> v2 = [3.2;4;5];
>> v3 = [1 2 3];
>> A = [1 2;3 4;5 6];
>> B = [1 1;2 2;3 3];
#可以将数组中的所有元素与某个标量相加/减:
>> r = v1 + 1
r =
2
3
4
>> A1 = A + 1
A1 =
2 3
4 5
6 7
#可以将两个同型数组相加/减
>> vs = v1 + v2
vs =
4.2000
6.0000
8.0000
>> C = A + B
C =
2 3
5 6
8 9
#矩阵各列/行可分别加/减某向量(要求二者行/列相同)
>> N = A + v1
N =
2 3
5 6
8 9
################################################################################################################################
AO = [2 2;4 4];
#可以进行数乘/除
#数在矩阵前后均可
>> AO * 2
ans =
4 4
8 8
>> va = vs / 2
va =
2.1000
3.0000
4.0000
>> A2 = AO / 2
A2 =
1 1
2 2
################################################################################################################################
#可以进行矩阵乘法
>> A * AO
ans =
10 10
22 22
34 34
################################################################################################################################
#左除(\):x = A \ b即为A * x = b的解
#如果方程无解,存在误差,即返回A * x = p的解
#如果A可逆,x = A^(-1) * b,否则二者近似
#相当于mldivide()
>> a=[1 2 3; 4 2 6; 7 4 9];
>> b=[4; 1; 2];
>> a \ b
ans =
-1.5000
2.0000
0.5000
#右除(/):x = A / b即为x * A = b的解
#如果A可逆,x = b * A^(-1),否则二者近似
2.点乘与点除
A .* B:
#A,B均为数组时,将对应元素相乘
#要求矩阵同型
#A,B中至少有1个为标量时,相当于*
>> A .* B
ans =
1 2
6 8
15 18
A ./ B:
#A,B均为数组时,将对应元素相除
#要求矩阵同型
#A为数组时,B为标量时,相当于/
#A为标量时,B为数组,只能用./
#A,B均为标量时,相当于/
>> A ./ B
ans =
0.333 0.667 1.000
2.000 1.250 0.444
9.000 2.667 7.000
A .\ B:
#A,B均为数组时,相当于B ./ A
#要求矩阵同型
3.次方:
A^n:相当于n个A相乘
#参数说明:
A为矩阵或数,n为数
>> [1 2;3 1]^2
ans =
7 4
6 7
A.^n:将矩阵A的每个元素a~ij都变为(a~ij)^n
>> [1 2;3 1].^2
ans =
1 4
9 1
4.转置:
>> x = 1:3;
>> x = x'
x =
1
2
3
>> A'
ans =
1 3 5
2 4 6
#一次性创建+转置时使用圆括号来指定运算的顺序
>> x = ( 1 : 2 : 5 )'
x =
1
3
5
四.相关函数
1.求逆矩阵:
求矩阵的秩:k = rank(A[,tol])
#参数说明:
A:指定矩阵
k:返回矩阵的秩
################################################################################################################################
求逆矩阵:Y = inv(X)
#参数说明:
X:指定原矩阵
Y:返回逆矩阵
#实例:
>> X=[2,1,2;1,3,2;1,1,1];
>> inv(X)
ans =
-1 -1 4
-1 0 2
2 1 -5
2.求行列式:
求矩阵的行列式:d = det(A)
#参数说明:
A:指定矩阵
d:返回行列式
#实例:
>> det([1,2,3;1,1,1;4,1,2])
ans =
-4
3.统计:
max(x1,x2...):返回x1,x2...中的最大值
#若只传入1个向量,返回该向量中最大的元素
#若只传入1个矩阵,返回该矩阵每列最大的元素构成的行向量
#若赋给两个变量,则分别为最大值及其索引
#实例:
>> vm = max(va)
vm =
4.0000
################################################################################################################################
min(x1,x2...):返回x1,x2...中的最小值
#若只传入1个向量,返回该向量中最小的元素
#若只传入1个矩阵,返回该矩阵每列最小的元素构成的行向量
#若赋给两个变量,则分别为最小值及其索引
################################################################################################################################
sum(x1,x2...):返回x1,x2...的总和
#若只传入1个向量,返回该向量的总和
#若只传入1个矩阵,返回该矩阵每列总和构成的行向量
#实例:
>> sum([1 2;0 5])
ans =
1 7
>> sum(sum([1 2;0 5]))
ans =
8
################################################################################################################################
mean(x1,x2...):返回x1,x2...中的平均值
#若只传入1个向量,返回该向量平均值
#若只传入1个矩阵,返回该矩阵每列平均值构成的行向量
################################################################################################################################
[m,n] = size(A):即A为m * n的矩阵
#实例:
>> size([1 2;0 5;7 0])
ans =
3 2
################################################################################################################################
length(A):返回向量A的长度
4.排序:
sort(A):对A的每列进行重新排序,从上到下逐渐增加
################################################################################################################################
sortrows(A):对矩阵A的各行重新排序,从上到下第一列的元素依次增大
#实例:
>> sortrows([1 2 3;0 5 6;7 0 9])
ans =
0 5 6
1 2 3
7 0 9
find(A == n):返回矩阵A中等于n的元素是第几个
#实例:
>> find([1 2 3;0 5 6;7 0 9] == 7)
ans =
7
################################################################################################################################
round(A):将矩阵A中的每个元素4舍5入保留到整数位
#实例:
>> vr = round(va)
vr =
2
3
4
################################################################################################################################
求逆运算的条件数:C = cond(A[,p])
#条件数用于衡量解算过程中答案对输入数据变化和舍入误差的敏感程度,值越大越敏感
#参数说明:
A:指定矩阵
p:指定返回p-范数条件数;为1/2(默认值)/Inf/'fro'
#2-范数条件数相当于κ(A) = ||A|| * ||A^{-1}||
C:返回条件数