1.数值数组
数组(array)是matlab的基本数据结构。数组按照数据类型来分类,数组有若干个元素依次序组成,每个元素有唯一的下标。
m×n的矩阵即具有m行n列的矩阵
1.1创建数组
创建数值数组的基本方式:
方法1:
A=[1,2,3,4;2,3,4,1;3,4,1,2]
方法2:
A=[1 2 3 4
2 3 4 1
3 4 1 2]
结果:
1.2求数组大小
1.2.1数组大小
s=size(A)
结果:
前面一位代表行数,后面一位代表列数,即表示A为三行四列的矩阵
1.2.2数组长度
len=length(A)
结果:
TIPS
size(s)
表示s是一个一行二列的矩阵。
1.3访问数组元素
1.3.1 用A(i,j)表示数组的第i行,第j列的元素
1.3.2 用A([i1,i2,i3,...,ir],[j1,j2,j3,.....,js])表示由数组A的第i1,i2,...,ir行与j1,j2,...,js列交叉位置上的元素按照i1,i2....,ir和j1,j2,....,js 顺序构成子矩阵
例:
A([3,1][2,3,1]),即从A数组中的第三行按 2,3,1顺序排列元素,然后再从第一行按2,3,1顺序排列元素。
A([3,1],[4,1,2,3])
原矩阵:
A =
1 2 3 4
2 3 4 1
3 4 1 2
修改后:
>> A([3,1],[4,1,2,3])
ans =
2 3 4 1
4 1 2 3
1.3.3 用A(k)表示数组A从首行狩猎元素开始逐列的数的第k个元素
例子:
A(1)=1, A(2)=2,A(3)=3, A(4)=2, A(5)=3, A(6)=4...............A(8)=4,......A(12)=2。
1.4修改数组元素
1.4.1直接代入矩阵数据
如:A=[1,3,4,2;2,3,5,1;1,6,4,2]
1.4.2修改数组中某一个元素的值
如:A(2,3)=1
Warning:若修改数组越界,即A(i,j)中i>m或j>n,则在超出的范围内填上0
冒号运算符
用法1:生成等差数列
j:k :生成从j到k的公差为1的等差数列,1行[k-j+1]列
>> 3:5
ans =
3 4 5
>> 2:6
ans =
2 3 4 5 6
j:i:k
首项为j,公差为i,j+ni<=k.
>> 2:2:8
ans =
2 4 6 8
>> 2:2:7
ans =
2 4 6
如j>k
>> 6:2
ans =
1×0 empty double row vector
Note:冒号运算符优先级比加减法更低,j,i,k一般不需要括号括住
第二种用途:
A =
1 2 3 4
2 3 4 1
3 4 1 2
(1)A(i,:)表示A的第i行
>> A(2,:)
ans =
2 3 4 1
(2)A(:,j)表示A的第j列
>> A(:,3)
ans =
3
4
1
(3)A([i1,i2,i3,i4,...,in],:)
>> A([2,3,1],:)
ans =
2 3 4 1
3 4 1 2
1 2 3 4
(4)列同理同上
略
(5)A(:)按照A的全部元素逐列排列而成形成列变量
>> A(:)
ans =
1
2
3
2
3
4
3
4
1
4
1
2
列:
>> A([2,3],:)=A([3,2],:)
A =
1 2 3 4
3 4 1 2
2 3 4 1
>> A(2,:) = A(2,:) - 3*A(1,:)
A =
1 2 3 4
0 -2 -8 -10
2 3 4 1
删除矩阵内某行或某列
A([1,2],:)=[] /* 删除第1行与第2行*/
单位矩阵eye
用法1:eye(3)
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
用法2:eye(3,5)
>> eye(3,5)
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
用法3:eye(size(A))
生成与A规模相同的单位矩阵(A矩阵为3行4列)
>> eye(size(A))
ans =
1 0 0 0
0 1 0 0
0 0 1 0
zeros(2,3) ones(4,3) ones(size(A))
rand:生成0到1的一个随机数。
>> rand
ans =
0.8147
linspace(a,b) 生成从a开始到b结束共100个元素的等差数列
相当于: a:(b-a)/99:b
linspace(a,b,n) 生成从a开始到b结束共n个元素的等差数列
相当于:a:(b-a)/(n-1):b
diag用法
(1)X=diag(v),X以向量v为主对角线的方阵,其余元素为0
>> diag([1,2,3])
ans =
1 0 0
0 2 0
0 0 3
(2)X=diag(v,k) X是以向量v为第k条对角线的方阵。从主对角先数起主对角线相当于k=0,k>0相当于位于主对角线上方,
>> diag([1,2,3],1)
ans =
0 1 0 0
0 0 2 0
0 0 0 3
0 0 0 0
>> diag([1,2,3],2)
ans =
0 0 1 0 0
0 0 0 2 0
0 0 0 0 3
0 0 0 0 0
0 0 0 0 0
(3)v=diag(X)列向量v是矩阵X的主对角线
>> A
A =
1 2 3 4
0 -2 -8 -10
2 3 4 1
>> diag(A)
ans =
1
-2
4
(4)v=diag(X,k) v是矩阵X的第k条对角线(k为负数时,在主对角线的下方,正:主对角线上方)
>> diag(D,-2)
ans =
7
>> diag(D,-1)
ans =
4
8
>> diag(D,0)
ans =
1
5
9
创建坐标网格
meshgrid输入项x,y是横纵坐标向量;输出项X,Y是矩阵,规模相同,列数等于length(x),行数等于length(y)。X的行向量都是x,Y的列向量都是y。
命令:[X,Y]=meshgrid(x,y)
[X,Y]=meshgrid(x) //相当于[X,Y]=meshgrid(x,x)
>> x=[1,2,3]
x =
1 2 3
>> y=[1,2]
y =
1 2
>> [X,Y]=meshgrid(x,y)
X =
1 2 3
1 2 3
Y =
1 1 1
2 2 2
矩阵合成
(1)C=[A,B] 将矩阵A和B水平合成为矩阵C A,B必须行数相同
(2)C=[A;B] 讲矩阵A和B垂直合成为矩阵C A,B必须列数相同
数据统计分析函数
MATLAB十一数组的形式保存并处理统计数据的。
max(A)
从A中找出每一列最大的元素
A =
1 2 3 1
2 3 4 1
3 4 1 2
4 1 2 3
>> C=max(A)
C =
4 4 4 3
类似的还有:
min、sum、prod(乘积)、mean(平均值)、median(中位数)、range(极差)、var、()方差std标准差
(后面再补充)
数组运算
运算符 | 说明 |
+ | 对应元素间加法 |
- | 减法 |
.* | 乘法 |
./ | 除法(左边除以右边) |
.\ | 左除法(左边除右边) |
.^ | 对应元素间的乘幂 |
.' | 转置,遇负数不取共轭 |
>> A=[1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> B=[-1,-1,-1;2,2,2]
B =
-1 -1 -1
2 2 2
>> A+B
ans =
0 1 2
6 7 8
>> A-B
ans =
2 3 4
2 3 4
>> A.*B
ans =
-1 -2 -3
8 10 12
>> A./B
ans =
-1.0000 -2.0000 -3.0000
2.0000 2.5000 3.0000
>> A.\B
ans =
-1.0000 -0.5000 -0.3333
0.5000 0.4000 0.3333
>> A.^B //以B内元素为次方
ans =
1.0000 0.5000 0.3333
16.0000 25.0000 36.0000
>> A.' //转置
ans =
1 4
2 5
3 6
>> 2.\A //2除A==A除以2
ans =
0.5000 1.0000 1.5000
2.0000 2.5000 3.0000
>> A.^2
ans =
1 4 9
16 25 36
>> 2.^A //以A内元素为次方
ans =
2 4 8
16 32 64
矩阵运算
运算符 | 说明 |
+ | 与数组运算相同 |
- | 与数组运算相同 |
* | 矩阵乘法,可以复习一下线代 |
/ | 矩阵右除,B/A,即B*A的转置 |
\ | 矩阵左除,B\A,即B的转置*A |
^ | 仅限于方阵,A^2即A*A |
' | 转置,遇复数取共轭,即复共轭转置 |
常用线代运算函数有
rref(行最简形),rank(秩),inv(逆矩阵),trace(迹),det(行列式),eig(特征值和特征向量),norm(范数),null(零空间基底),orth(像空间基底)等。
(后面补充)
例题:
解法1:
A =
1 2 2 1
2 4 3 4
>> B=[3;6]
B =
3
6
>> null(A,'r')
ans =
-2 -5
1 0
0 2
0 1
>> A\B
ans =
0
1.5000
0
0.0000
解法2:
求增广矩阵[A,B]为行最简形: