1、003. 矩阵操作Matlab的基本数据元素就是矩阵,可以是2维、1维(向量)、3维或更多维。一、 矩阵创建与表示Matlab不用提前声明或定义变量,直接【起变量名、赋值、使用】(注1)。1. 特殊向量:(注2)k = 1 : 1 : 10 % 创建行向量k,起始值1,步长1,终止值10% 默认步长是1, 即 k = 1 : 10% 步长可以是负数(起始值 终止值)运行结果:k = 1 2 3 4 5 6 7 8 9 10 2. 一般矩阵:(字符串为元素的矩阵建议用元胞数组,下次内容)A = 1 2,3;4 5,6 % 创建2行3列矩阵A, 矩阵大小不用预先定义 % 矩阵元素必须放在“ ”内%
2、 同行元素间用“, 或空格”隔开% 行与行间用“;”隔开% 矩阵元素可以是数值、变量、字符、函数表达式运行结果:A = 1 2 3 4 5 6 3. 特殊矩阵:ones(m,n) % 生成mn维的全“1”矩阵zeros(m,n) % 生成mn维的全“0”矩阵eye(m,n) % 生成mn维的单位矩阵(多余的行或列全为0)diag(k或A) % 生成或提取对角矩阵triu(A) % 提取矩阵A的上三角部分生成上三角矩阵tril(A) % 提取矩阵A的下三角部分生成下三角矩阵rand(m,n) % 生成mn维的(0,1)区间均匀分布的随机矩阵randn(m,n) % 生成mn维均值为0,方差为1的
3、标准正态分布随机矩阵fiplr(A) % 矩阵A左右翻转 fipud(A) % 矩阵A上下翻转fipdim(A,dim) % 矩阵A特定维度dim(1,2)翻转sparse() % 生成稀疏矩阵full() % 将稀疏矩阵化为普通矩阵 4. 矩阵的维度、大小、长度A = 1 2,3;4 5,6;a = ndims(A) % 返回矩阵A的维度(几维矩阵)I,J = size(A) % 返回矩阵A各维度维数的大小(几行,几列)L = length(A) % 返回矩阵A各维度维数的最大值(行数,列数的最大值)运行结果:a = 2 I = 2 J = 3 L = 3注:length() 通常用于测量向
4、量的大小。5. 矩阵拼接、扩充、变形C = A, B % 水平拼接C = A, B % 水平拼接D = A; B % 垂直拼接E = repmat(A,1,2) % 排成12的两块A,同 A, AF = repmat(A,2,1) % 排成21的两块A,同 A; AX = 1:24; % 124的一维行向量reshape(X, 3,8); % 把X变形为38的二维矩阵reshape(X, 3,8); % 把X变形为38的二维矩阵二、矩阵元素的寻址和访问1. 访问2维矩阵(mn)各元素的位置有两种方式: 行列下标索引A(i, j)第i行,第j列的元素 线性索引,也是矩阵存放元素的顺序,resha
5、pe()变形保持该顺序A(1), A(2), , A(m*n)元素依次取自第1列,再第2列, 故A(i, j) = A( (j-1)*m+i)两种索引间的转换函数:I, J = ind2sub( size(A), IND)IND = sub2ind(size(A), I, J)find() 函数常用来查找矩阵中满足一定条件的元素A = 1 2,3;4 5,6;ind = find(A2); % 返回A中大于2的元素的线性索引值m,n = find(A2); % 返回A中大于2的元素的行列下标索引值I, J = ind2sub(size(A), ind) % 线性索引转行列下标索引IND = s
6、ub2ind(size(A), I, J) % 行列下标索引转线性索引运行结果: I = 2 J = 1 IND = 2 2 2 4 1 3 5 2 3 62. 用冒号“:”获取矩阵的一些元素A(i, :) 矩阵A的第i行,所有列A(:, j) 矩阵A的第j列,所有行A(:,i: j) 矩阵A的第i到第j列,所有行A(i:j, k:end) 矩阵A的第i到第j行,第k到最后一列A(:, 1,3) 矩阵A的第1、第3列,所有行A(:) 按线性索引返回矩阵A的所有元素(向量)3. 利用空矩阵删除矩阵元素A(i, :) = ; % 删除矩阵A的第i行A(:, j) = ; % 删除矩阵A的第j列A(
7、i:j, :) = % 删除矩阵A的第i到第j行A(:, i:j) = % 删除矩阵A的第i到第j列A(sub2ind( size(A), i, j) ) = % 删除矩阵A的第i行第j列的元素(注3) 三、矩阵运算与矩阵函数1. 矩阵运算(1) 通常的矩阵间运算加、减、乘、幂: + - * 左除 :AX = B X=A-1B X = AB右除 / : YA = C Y = C A-1 Y = C/A(2) 点运算同型矩阵各个对应位置的元素做该运算点乘、点左除、点右除、点幂: .* . ./ .+ .- 同 + -(3) 矩阵运算转置: A方阵的逆: inv(A) 非方阵的广义逆:pinv(A
8、) % ABA=A, BAB=B矩阵或向量的范数:norm(A) = norm(A,2); norm(A,1); norm(A,inf)方阵的行列式: det(A)矩阵的秩:rank(A)矩阵的迹:trace(A)基础解系(矩阵的零空间):null(A)标准正交化:orth(A)化行最简型(初等行变换解线性方程组):rref(A)两个子空间的夹角(两个向量的夹角):subspace(A,B)方阵的特征值(对角阵d)与特征向量(v的列向量):v,d=eig(A)2. 矩阵函数min(A,dim) 按维度求矩阵A最小值,min(A) = min(A,1) 按列max(A)=max(A,1) 求矩阵
9、A各列的最大值mean(A) = mean(A,1) 求矩阵A各列的平均值 sort(A) 矩阵各列按递增顺序排序sort(A, descend) 矩阵各列按递减顺序排序sum(A) 矩阵A各列元素求和prod(A) 矩阵A各列元素求积dot(A,B) A,B(同型)各列做内积(点积)cross(A,B) A,B(至少某个维度是3维)的外积(叉积)cumsum(A) 每列元素的累计和(第i行是A前i-1行元素的和)cumprod(A) 每列元素的累计积四、三维矩阵可以想象成一本书的“行、列、页”。 处理k个mn的二维矩阵,可用一个mnk的三维矩阵A:A(:, :, 1) 表示第1个mn矩阵(第
10、1页)A(:, :, 2) 表示第2个mn矩阵(第2页)A(:, :, k) 表示第k个mn矩阵(第k页)每个A(:, :, k)与2维矩阵操作一样。D = rand(2,4,3) % 生成243的随机矩阵DS = reshape(D,3,4,2) % 变形运行结果: D(:,:,1) = 0.1270 0.6324 0.2785 0.9575 0.9134 0.0975 0.5469 0.9649D(:,:,2) = 0.1576 0.9572 0.8003 0.4218 0.9706 0.4854 0.1419 0.9157D(:,:,3) = 0.7922 0.6557 0.8491 0
11、.6787 0.9595 0.0357 0.9340 0.7577DS(:,:,1) = 0.1270 0.0975 0.9575 0.9706 0.9134 0.2785 0.9649 0.9572 0.6324 0.5469 0.1576 0.4854DS(:,:,2) = 0.8003 0.9157 0.6557 0.9340 0.1419 0.7922 0.0357 0.6787 0.4218 0.9595 0.8491 0.7577 注1. Matlab的变量名必须字母开头,由字母、下划线、数字构成,对字母大小写敏感;起变量名时应避开Matlab里的关键词。注2. Matlab语句结束用分号,若不用分号则自动输出语句的运行结果。注3. 矩阵删除单个元素必须用线性索引,否则会把报错。