>> A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
>> A=[1,2,3;4,5,6;7,8,9];
>> B=[-1,-2,-3;-4,-5,-6;-7,-8,-9];
>> C=[A,B;B,A]
C =
1 2 3 -1 -2 -3
4 5 6 -4 -5 -6
7 8 9 -7 -8 -9
-1 -2 -3 1 2 3
-4 -5 -6 4 5 6
-7 -8 -9 7 8 9
拓展:复数矩阵,可以用实部矩阵和虛部矩阵构成复数矩阵。
>> A=[1,2,3;4,5,6];
>> B=[6,7,8;9,10,11];
>> C=A+B*i
C =
1.0000 + 6.0000i 2.0000 + 7.0000i 3.0000 + 8.0000i
4.0000 + 9.0000i 5.0000 +10.0000i 6.0000 +11.0000i
>> x=linspace(0,4,5)
x =
0 1 2 3 4
>> x=linspace(0,6,5)
x =
0 1.5000 3.0000 4.5000 6.0000
//可见linspace函数是均匀分配的。
1. 结构矩阵
格式为:(有点像C中的 结构体)
结构矩阵名.成员名=表达式
>> a(1).x1=10; a(1).x2='lu'; a(1).x3=[11,21;34,78];
>> a(1)
ans =
包含以下字段的 struct:
x1: 10
x2: 'lu'
x3: [2×2 double]
>> a(2).x1=11; a(2).x2='liu'; a(2).x3=[12,22;35,79];
>> a
a =
包含以下字段的 1×2 struct 数组:
x1
x2
x3
所以啊,Matlab中的a(i)相当于C中的a[i]数组。
[1,5] 类似于离散中的集合{1,5}
[1:5] 是一种缩写,表示{1,2,3,4,5}
2.单元矩阵
建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵元素用大括号括起来。
>> b={10,'lu',[11,21;34,78];11,'liu',[12,22;35,79]};
>> b
b =
2×3 cell 数组
{[10]} {'lu' } {2×2 double}
{[11]} {'liu'} {2×2 double}
1. 通过下标来引用矩阵的元素
A(3,2)表示A矩阵第3行第2列的元素。和C中二维数组不同的是,矩阵下标都是从1开始的。
>> A=[1,2,3;4,5,6];
>> A(2,3)
ans =
6
>> A(4,5)=10
A =
1 2 3 0 0
4 5 6 0 0
0 0 0 0 0
0 0 0 0 10
注意这里和C也有不同,它不存在越界问题,如果越界会自动扩展矩阵,并默认矩阵中元素为0.
2. 通过序号来引用矩阵的元素
在 Matlab中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存储第二列元素,直到矩阵的最后一列元素。
矩阵元素的序号就是矩阵元素在内存中的排列顺序。
>> A=[1,2,3;4,5,6];
>> A(2)
ans =
4
>> A
A =
1 2 3
4 5 6 //C语言中是按行存储的,注意区分。
sub2ind函数:
>> A=[8,6,2;14,5,7]
A =
8 6 2
14 5 7
>> i=sub2ind(size(A),2,3)
i = //这里的size(A)也可以用[2,3]代替
6 //此处即A(2,3)可以用A(6)代替
也可以得到多个序号组成的矩阵:
>> A=[8,6,2;14,5,7];
>> i=sub2ind(size(A),[1,2;2,2],[1,1;3,2])
i =
1 2
6 4 A(1,1)即A(1);A(2,1)即A(2);
A(2,3)即A(6);A(2,2)即A(4);
>> A=[8,6,2;14,5,7];
>> [i,j]=ind2sub([2,3],6)
i =
2
j =
3
>> [i,j]=ind2sub(size(A),[1,2,6,4])
i =
1 2 2 2
j =
1 1 3 2
利用冒号表达式获得子矩阵
特别地有A( : ),即将矩阵A的每一列元素堆叠起来,成为一个列向量。
>> A=[1:5;6:10;11:15]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
>> A(1:2,:) //第1 2行的全部元素
ans =
1 2 3 4 5
6 7 8 9 10
>> A(1:2,1:2:5) //第1 2行 1 3 5列的元素
ans =
1 3 5
6 8 10
end运算符:表示某一维的末尾元素下标
>> A=[1:5;6:10;11:15]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
>> A(end,:)
ans =
11 12 13 14 15
>> A(end,end)
ans =
15
空矩阵是指没有任何元素的矩阵。
>> x=[]
x =
[] x即为一个空矩阵
>> A=[1:5;6:10;11:15]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
>> A(:,[2,4])=[]
A =
1 3 5
6 8 10
11 13 15
表示删除第2列和4列的元素。
reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
注意:reshape函数只是改变原矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序。
>> A=[1:5;6:10;11:15]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
>> B=reshape(A,5,3)
B =
1 12 9
6 3 14
11 8 5
2 13 10
7 4 15
这里可以和前面学的A( : ) 结合起来,将矩阵A的全部元素形成一个列向量。即不输出A( : ),而是将其重定向赋值给B。
>> A=[1:3;4:6]
A =
1 2 3
4 5 6
>> B=A(:)
B =
1
4
2
5
3
6
使用inv时,必须对象为方阵,得到矩阵的逆矩阵。