3.2矩阵基本操作
例3-22
1 2 3 A 4 5 6
对矩阵进行抽取操作。 >> A=[1,2,3;4,5,6]; >> B=diag(A,1) B= 2 6 >> C=diag(B,1) C= 0 2 0 0 0 6 0 0 0
>> D=diag(A,-1) D= 4 >> E=tril(A,1) E= 1 2 0 4 5 6 >> F=triu(A) F= 1 2 3 0 5 6
2
A(i,j) 取矩阵A中第i行,第j列的元素。 A(:,j) 取矩阵A的第j列全部元素。
A(i,:)
取矩阵A的第i行全部元素。
A(i:i+m,:) 取矩阵A第i~i+m行的全部元素。 A(:,j:j+m) 取矩阵A第j~j+m列的全部元素。 A(i:i+m,j:j+m) 取矩阵A第i~i+m行内的, 并在第j~j+m列的全部元素。 A([i,j],[m,n]) 取矩阵A第i行、第j行中位于 第m列、第n列的元素。
例如: >> A(end,:) %取A最后一行 ans = 16 ans = 3 18 4 19 5 20
5
17
18
19
20
>>A([1,4],3:end) %取A第1,4行中第3列到最后一列的元素
3.3 矩阵的特殊操作
还有一种经常用到的命令是A(:) ,A(:)在赋 值语句的右端表示由矩阵A的元素按列的顺序 排成的列向量。例如:
14
3.3 矩阵的特殊操作
B=rot90(A) 将矩阵A逆时针旋转90。生成矩阵B。 B=rot90(A,k) 将矩阵A逆时针旋转k*90。生成矩阵B,k是 整数。
15
3.3 矩阵的特殊操作
例3-21 A
1 2 3 4 5 6
>> rot90(A) ans = 3 6 2 5 1 4 >> rot90(A,2) ans = 6 5 4 3 2 1 >> rot90(A,-1) ans = 4 1 5 2 6 3
3
3.3 矩阵的特殊操作
例3-20 矩阵的角标
>>A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15; 16,17,18,19,20];
>>A(2:3,4:5)
>> A([1,2],[2,4])
4
3.3 矩阵的特殊操作
还可以利用一般向量和end运算符来表示矩 阵下标,end 表示矩阵某维的末尾元素下标。
8
3.3 矩阵的特殊操作
(2)多个矩阵组成大矩阵 大矩阵可以由多个小矩阵按行列排列在方括号中建立。如: C=[A,eye(size(A));ones(size(A)),A],
1 2 3 A 4 5 6 7 8 9
2 3 1 0 0 5 6 0 1 0 8 9 0 0 1 1 1 1 2 3 1 1 4 5 6 1 1 7 8 9
11
3.3 矩阵的特殊操作
5、矩阵的变维
MATLA可以实现矩阵元素的重新排列,以实现矩阵 尺寸或维数的变化。根据MARLAB矩阵元素的排列顺 序规则,重新排列的元素按照先排列,再排行,然 后排列第三维,第四维的顺序排列。 命令:C=reshape(A,m,n,p,…) A为原始矩阵,C 为变维后的矩阵,m,n,p等分别为新矩阵各维的阶数 (行、列等)。 新矩阵的各维阶数的乘积必须与原矩阵[1,2;3,4] >>b=A(:) b= 1 3 2 4
6
3.3 矩阵的特殊操作
如果A(:)出现在赋值语句的左端,表示用一个向量对矩阵A进行赋值, 此时矩阵A必须事先存在。
如,A是上述矩阵,那么A(:)=5:8,表示行向量(5,6,7,8)的4个元 素依次按照列顺序给A的元素赋值,保持A的维数不变。
17
3.3 矩阵的特殊操作
B=tril(A,n) 抽取矩阵A的第n条对角线下面的部分(含第n 条对角线)组成矩阵B,其余位置元素为0,n的定义同diag。
B=triu(A,n) 抽取矩阵A的第n条对角线上面的部分(含第n 条对角线)组成矩阵B,其余位置元素为0,n的定义同diag。
18
3.3 矩阵的特殊操作
对矩阵进行翻转和旋转 >> A=[1,2,3;4,5,6] ; >> flipud(A) ans = 4 5 6 1 2 3 >> flipdim(A,1) ans = 4 5 6 1 2 3 >> fliplr(A) ans = 3 2 1 6 5 4 >> flipdim(A,2) ans = 3 2 1 6 5 4
12
3.3 矩阵的特殊操作
例3-24 矩阵的变维 >>A=[1:12]; >> reshape(A,3,4) ans = 1 4 7 10 2 5 8 11 3 6 9 12 >> reshape(A,2,3,2) ans(:,:,1) = 1 3 5 2 4 6 ans(:,:,2) = 7 9 11 8 10 12
A=
5
6
7
8
7
3.3 矩阵的特殊操作
2、部分扩充 (1)单个矩阵的扩充
对一个矩阵的单个元素进行赋值和操作,如:
A(3,2)=200 % 表示将矩阵A的第3行第2列元素赋值 为200
如果给出的行值和列值大于原矩阵的行数和列数, MATLAB自动扩展原矩阵,扩展后未赋值的元素置为 0。 例3-21 单个矩阵扩充
13
3.3 矩阵的特殊操作
6、矩阵的翻转和旋转
对矩阵进行翻转和旋转的函数如下: B=fliplr(A) 对矩阵A进行左右翻转生成矩阵B,如果A是行向量,则返回一个大小和A 相同,元素的排列顺序和A相反的行向量;如果A是列向量,返回A本身。 B=flipud (A) 对矩阵A进行上下翻转生成矩阵B,如果A是行向量,返回A本身;如果 A是列向量,则返回一个大小和A相同,元素的排列顺序和A相反的列向量。 B=flipdim(A,dim) 矩阵A的第n维翻转生成矩阵B,dim=1时,行翻转,相当于 flipud; dim=2时,列翻转,相当于fliplr。
9
即
eye( size ( A)) C ones ( size ( A )) A A
1 4 7 C 1 1 1
3.3 矩阵的特殊操作
3、部分删除
利用空矩阵的特性,可以从一个矩阵中删除 部分行和部分列元素。如:A是一个4×5的矩 阵,A(:,[3,4])=[] 表示删除A的第3列和第4列 元素。 例3-22 矩阵的部分删除
16
3.3 矩阵的特殊操作
7、矩阵的抽取
矩阵的抽取包括:抽取对角线元素(diag),抽取矩 阵的上三角(triu)和下三角(tril)部分。函数的调用 格式如下: b=diag(A,n) 抽取矩阵A的第n条对角线生成列向 量b,n>0时,抽取A主对角线上方第n条对角线; n<0时,抽取A主对角线下方第n条对角线;n=0或 不指定n时,b为A的主对角线。 C=diag(b,n) 创建对角矩阵A,使b作为A的第n条 对角线,当n=0或不指定n时,b为A的主对角线。
10
3.3 矩阵的特殊操作
4、部分修改 当矩阵的角标出现在等号左端时,表示对原矩阵中 的部分或全部元素重新赋值。 如:A([1,3],:)=B([1,2],:) 表示将矩阵A的第1、3 行用矩阵B的1,2行代替。 例3-23 矩阵的部分修改 >> A=[1,2,3;4,5,6;7,8,9]; >> B=zeros(4,3); >> A([1,3],:)=B([1,2],:)
3.3.2 矩阵的修改
1、矩阵的角标
数学上用矩阵元素在矩阵中所处的行列标号 来表示矩阵中每个元素的位置。 MATLAB也用类似的方法来表示,并将行列标 号称为角标。
– 如A(2,3)表示矩阵A中2行3列的元素,2和3 称为矩阵A的角标。
角标可以是表达式,矩阵变量名与角标一起 就决定了矩阵的元素及位置。
19