Loading... ## 矩阵元素存储次序: 在matlab中,元素在内存中存储方式是按“列”存储的,并且矩阵不是从0开始存储而是从1开始存储。 ### 例如: ```matlab a = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12] ``` 第5个元素为:6;(从列数) ## 矩阵元素的相关操作: ### 下标公式: 假如有一个 m * n 矩阵,矩阵元素A(i,j); 那么元素A在矩阵的下标位置为:`(j - 1)* m + i` ### 利用下标取矩阵的元素: ```matlab c = (i, j); %取矩阵第i行第j列元素 c = (i); %取矩阵第i个元素,注意我们得从列方向数 c = (a : b); %取矩阵从 下标a ~ 下标b 的所有元素(包含a、b) ``` ### 矩阵元素的赋值: 矩阵元素的赋值有三种方式:全下标方式、单下标方式、全元素方式。(利用单下标方式和全元素方式赋值的矩阵必须是被引用过的矩阵) #### 全下标方式: ```matlab a(1 : 2, 1 : 3) = [1, 1, 1; 1, 1, 1]; %给矩阵的 1 ~ 2行和1 ~ 3列赋值 ``` #### 单下标方式: ```matlab %首先创建了一个i * j的矩阵a a(3) = 5; %给矩阵a下标为3的位置赋值为5 ``` #### 全元素方式: ```matlab %首先创建了一个3 * 3的矩阵a a(:) =1:9; ``` ### 矩阵元素的删除: 利用: 空矩阵[],可将矩阵中的单个元素、某行、某列、某矩阵子块、整个矩阵进行删除。 #### 例如: ```matlab a = [1, 2, 3; 4, 5, 6;7, 8, 9]; a(2,:) = [];%删除a矩阵的第二行的所有列,‘:’可代表整行,整列 a(1:2) = [];%删除a矩阵下标为1、2的元素,并且矩阵会变成向量 a(:) = [];%删除矩阵a所有元素 ``` ### 矩阵的创建: <div class="tip inlineBlock warning"> 矩阵创建的规则: * 矩阵的所以元素必须放在放括号[]内; * 每行的元素之间需用逗号或空格隔开; * 矩阵的行和行之间用分号或回车符分隔; * 元素可以是数值或表达式; </div> #### 直接输入法: 适用于建立规模较小的矩阵 ```matlab a = [1, 2, 3, ...]; ``` #### 抽取法: 适用于从大矩阵中抽取出小矩阵来 ```matlab a = [1, 2, 3; 4, 5, 6; 7, 8, 9]; b = a(2 : 3, 2 : 3);%提取a矩阵的2、3行与2、3列 ``` #### 拼接法: 行数和行数相同的小矩阵可在列方向上拼接成更大的矩阵。同理,列数和列数相同的小矩阵可在行方向上拼接成更大的矩阵。 ##### 例如: ```matlab a = [1, 2, 3; 4, 5, 6;];%2行3列矩阵 b = [7, 8, 9];%1行3列矩阵 c = [a; b];%拼接成3行3列矩阵 ``` #### 函数法: <div class="tip inlineBlock info"> zeros(m, n); 生成m*n阶的全0矩阵 ones(m, n); 生成m*n阶的全1矩阵 rand(m, n);生成m*n阶的满足0~1之间均匀分布的矩阵 randm(m, n);生成m*n阶满足正态分布的随机矩阵 eye(m, n);生成m*n阶的单位矩阵 magic(n);生成n*n阶魔方矩阵(每行、列、以及对角线之和相等并且等于(n^3 + n)/ 2的矩阵) pascal(n);生成n*n阶帕斯卡矩阵(在我们中国称为的杨辉三角) </div> #### cat拼接函数: ##### 使用格式: `c = cat(n, a1, a2, a3, ...);` n = 1,表示沿行方向拼接;n = 2, 表示沿列方向拼接。 ##### 例如: ```matlab a = [1, 2, 3; 1, 2, 3; 1, 2, 3]; b = [4, 5, 6; 4, 5, 6; 4, 5, 6]; c = cat(1, a, b);%按行方向拼接 %运行结果 c = 1 2 3 1 2 3 1 2 3 4 5 6 4 5 6 4 5 6 c = cat(2, a, b);%按列方向拼接 %运行结果 c = 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 ``` #### repmat拼接函数: ##### 使用格式: `c = repmat(a, m, n); `m和n分别表示沿行和列方向重复拼接a ##### 例如: ```matlab a = [1, 2, 3; 4, 5, 6]; c = repmat(a, 3, 3);%把a看成一个整体,拼接成3*3的矩阵 %运算结果 c = 1 2 3 1 2 3 1 2 3 4 5 6 4 5 6 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 4 5 6 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 4 5 6 4 5 6 ``` #### reshape变形函数: ##### 使用格式: `c = reshape(a, m, n); `a为旧矩阵,m和n为变形后新矩阵c的行数和列数 ##### 例如: ```matlab a = [1, 2, 3; 4, 5, 6]; c = reshape(a, 3, 2);%将原2*3阶矩阵变形为3*2阶矩阵 %运算结果 c = 1 5 4 3 2 6 ``` ## 矩阵的运算: ### 求矩阵行列式的值: #### 使用格式: `c = det(a);` a代表待求矩阵,c代表矩阵行列式的值 #### 举例: ```matlab a = [3, 2, 4; 1 , -1, 5; 2, -1, 3]; c = det(a); ``` ### 矩阵的加、减、数乘运算: 矩阵对应元素可直接进行加、减、乘运算,不需要借助辅助函数, 但进行运算的矩阵必须是同阶矩阵。 #### 举例: ```matlab a = [1, 2, 3; 4, 5, 6]; b = [5, 6, 7; 8, 9, 10]; c = a - b;%矩阵的减法运算 c = a + b;%矩阵的加法运算 c = a .* b;%矩阵的乘法运算 ``` ### 求矩阵的逆矩阵: #### 逆矩阵定义: 对于一个方阵a, 如果存在一个与其同阶的方阵b,使得ab=ba=1(1为单位矩阵),则称b为a的逆矩阵,当然a也是b的逆矩阵。 #### 使用格式: `c = inv(a);` #### 举例: ```matlab a = [1, 2, 3; 4, 5, 6]; c = inv(a); ``` ### 矩阵的除法: #### 矩阵的左除: `a\b = inv(a)*b;` #### 矩阵的右除: `a/b = a*inv(b);` ### 求矩阵的秩: #### 使用格式: `c = rank(a);` #### 举例: ```matlab a = [1, 2, 3; 4, 5, 6]; c = rank(a); ``` ### 求矩阵的特征值和特征向量: #### 使用格式: `[p, q] = eig(a); `q代表特征值矩阵,p代表特征向量矩阵 #### 例如: ```matlab a = [1, -3, 3; 3, -5, 3; 6, -6, 4]; [p, q] = eig(a); %运算结果: p = -0.4082 -0.8103 0.1933 -0.4082 -0.3185 -0.5904 -0.8165 0.4918 -0.7836 q = 4.0000 0 0 0 -2.0000 0 0 0 -2.0000 %q中特征值4对于的特征向量为[-0.4082, -0.4082, -0.8165];相信特征值和特征向量的对应规律很容易看出来了 ``` ### 矩阵的乘方与开方: `矩阵的乘方运算符:(^)` `矩阵的开方函数:sqrtm(a)` 注意:矩阵的乘方与开方运算是以矩阵作为一个整体进行运算的,而非针对元素的运算。 #### 举例: ```matlab a = [1, 2, 3; 4, 5, 6; 7, 8, 9]; b = a^2; c = sqrtm(a); ``` ### 矩阵的指数与对数运算: `指数运算函数:expm(a);` `对数运算函数:logm(a);` ### 矩阵的转置: 可利用转置符(')进行对矩阵的转置 #### 举例: ```matlab a = [1, 2, 3; 4, 5, 6]; b = a';%这就实现了对a的转置 ``` ## 矩阵的提取与翻转: <div class="tip inlineBlock share"> triu(a);提取矩阵a右上三角元素,其余元素补0 tril(a);提取矩阵a左下三角元素,其余元素补0 diag(a);提取矩阵a的对角线元素 filpud(a);矩阵a沿水平轴上下翻转 filplr(a);矩阵a沿垂直左右翻转 filpdim(a, dim);矩阵a沿特定轴翻转。dim = 1,按行翻转,dim = 2, 按列翻转 rot90(a);矩阵a整体逆时针旋转90度 </div> 最后修改:2021 年 12 月 16 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果文章有用,请随意打赏。