MATLAB符号矩阵的创建和访问(附带实例)
在线性代数中,矩阵有特定的数学含义,并且有其严格的运算规则。矩阵的概念是线性代数特有的。MATLAB 中的矩阵运算规则与线性代数中的矩阵运算规则相同。
【实例 1】创建符号矩阵。在命令行窗口中输入以下语句,并查看输出结果。
2) 定义整个矩阵为符号对象。矩阵元素可以是任何不带等号的符号表达式或数值表达式,各符号表达式的长度可以不同:矩阵每行内的元素间用逗号或空格分隔;行与行之间用分号隔开。
【实例 2】创建符号矩阵。在命令行窗口中输入以下语句,并查看输出结果。
3) 用子矩阵创建矩阵。在 MATLAB 的符号运算中,利用方括号 [] 可将小矩阵连接为一个大矩阵。
【实例 3】利用方括号 [] 将小矩阵连接成大矩阵示例。在命令行窗口中输入以下语句,并查看输出结果。
矩阵元素的访问与赋值常用的指令格式如下表所示:
数组是由一组元素排成的矩阵或多维阵列,在 MATLAB 中超越了线性代数的范畴,数组也是进行数值计算的基本处理单元。一行多列的数组是行向量;一列多行的数组就是列向量;数组可以是二维的,也可以是三维的,甚至是多维的。多行多列的“矩形”数组与线性代数中的矩阵从外观形式与数据结构上看,没有什么区别。
【实例 4】矩阵元素的标识与访问示例。在命令行窗口中输入以下语句,并查看输出结果。
在 MATLAB 中,数组的转置与矩阵的转置是不同的。用运算符“'”定义的矩阵转置,是其元素的共轭转置;运算符“.'”定义的数组的转置则是其元素的非共轭转置。
创建符号矩阵
1) 符号矩阵的创建与数值矩阵的创建类似,不同之处在于其元素被定义为符号对象,并用方括号括起来形成符号矩阵。【实例 1】创建符号矩阵。在命令行窗口中输入以下语句,并查看输出结果。
>> syms a11 a12 a13 a21 a22 a23 a31 a32 a33 >> A=[a11 a12 a13; a21 a22 a23; a31 a32 a33] A = [a11, a12, a13] [a21, a22, a23] [a31, a32, a33]
2) 定义整个矩阵为符号对象。矩阵元素可以是任何不带等号的符号表达式或数值表达式,各符号表达式的长度可以不同:矩阵每行内的元素间用逗号或空格分隔;行与行之间用分号隔开。
【实例 2】创建符号矩阵。在命令行窗口中输入以下语句,并查看输出结果。
>> syms a b c d e f g h k >> P=sym([a b c; d e f; g h k]) P = [a, b, c] [d, e, f] [g, h, k] >> Q=sym([1 2 3; 4 5 6; 7 8 9]) Q= [1, 2, 3] [4, 5, 6] [7, 8, 9] >> S=P+Q*i S= [a+i, b+2*i, c+3*i] [d+4*i, e+5*i, f+6*i] [g+7*i, h+8*i, k+9*i]使用函数 sym 定义整个矩阵为符号对象时,作为函数输入参数的矩阵方括号 [] 两端必须加英文输入状态下的单引号“'”。
3) 用子矩阵创建矩阵。在 MATLAB 的符号运算中,利用方括号 [] 可将小矩阵连接为一个大矩阵。
【实例 3】利用方括号 [] 将小矩阵连接成大矩阵示例。在命令行窗口中输入以下语句,并查看输出结果。
>> syms p q x y >> A=sym([a b; c d]); >> A1=A+p A1= [a+p, b+p] [c+p, d+p] >> A2=A-q A2= [a-q, b-q] [c-q, d-q] >> A3=A*x A3= [x*a, x*b] [x*c, x*d] >> A4=A/y A4= [a/y, b/y] [c/y, d/y] >> G1=[A A3; A1 A4] G1 = [ a, b, x*a, x*b] [ c, d, x*c, x*d] [a+p, b+p, a/y, b/y] [c+p, d+p, c/y, d/y] >> G2=[A1 A2; A3 A4] G2 = [a+p, b+p, a-q, b-q] [c+p, d+p, c-q, d-q] [x*a, x*b, a/y, b/y] [x*c, x*d, c/y, d/y]由上可见,4个2×2 的子矩阵组成一个 4×4 的大矩阵。
访问符号矩阵
符号矩阵的访问是针对矩阵的行或列与矩阵元素进行的。矩阵元素的标识或定位通用双下标格式,如下:A(r,c) % r 为行号,c 为列号
矩阵元素的访问与赋值常用的指令格式如下表所示:
指令格式 | 指令功能 |
---|---|
A(r,c) | 由矩阵 A 中 r 指定行、c 指定列之元素组成的子数组 |
A(r,:) | 由矩阵 A 中 r 指定行对应的所有列之元素组成的子数组 |
A(:,c) | 由矩阵 A 中 c 指定列对应的所有行之元素组成的子数组 |
A(:) | 由矩阵 A 的各个列按从左到右的次序首尾相接的“一维长列”子数组 |
A(i) | “一维长列”子数组的第 i 个元素 |
A(r,c)=Sa | 对矩阵 A 赋值,Sa 也必须为 Sa(r,c) |
A(:)=D(:) | 矩阵全元素赋值,保持 A 的尺寸不变,A、D 的元素总数应相同,但行宽、列长可不同 |
数组是由一组元素排成的矩阵或多维阵列,在 MATLAB 中超越了线性代数的范畴,数组也是进行数值计算的基本处理单元。一行多列的数组是行向量;一列多行的数组就是列向量;数组可以是二维的,也可以是三维的,甚至是多维的。多行多列的“矩形”数组与线性代数中的矩阵从外观形式与数据结构上看,没有什么区别。
【实例 4】矩阵元素的标识与访问示例。在命令行窗口中输入以下语句,并查看输出结果。
>> syms a11 a12 a13 a21 a22 a23 a31 a32 a33 >> A=sym([a11 a12 a13; a21 a22 a23; a31 a32 a33]); A = [a11, a12, a13] [a21, a22, a23] [a31, a32, a33] >> A(2,3) % 查询数组 A 的行号为 2、列号为 3 的元素 ans = a23 >> A(3,:) % 查询数组 A 中第三行所有的元素 ans = [a31, a32, a33] >> (A(:,2)) % 查询数组 A 中第二列所有的元素 ans= [a12] [a22] [a32] >> (A(:,2))' % 查询数组 A 中第二列转置后所有的元素 ans = [conj(a12), conj(a22), conj(a32)] >> B=(A(:))' % 对矩阵 A 中所有元素的复共轭转置(取复共轭后再转置) B = [conj(a11), conj(a21), conj(a31), conj(a12), conj(a22), conj(a32), conj(a13), conj(a23), conj(a33)] >> C=(A(:)).' % 将 A 中的元素按列顺序排列成行向量,但没有取复共轭 C = [a11, a21, a31, a12, a22, a32, a13, a23, a33]
在 MATLAB 中,数组的转置与矩阵的转置是不同的。用运算符“'”定义的矩阵转置,是其元素的共轭转置;运算符“.'”定义的数组的转置则是其元素的非共轭转置。
>> A(6) % 查询“一维长列”数组的第 6 个元素 ans = a32 >> A % 查询原 A 矩阵所有的元素 A = [a11, a12, a13] [a21, a22, a23] [a31, a32, a33] >> syms p >> P=sym([p p p ; p p p; p p p]); % 创建 P 矩阵 >> A=P % 将 P 矩阵的所有元素赋值给 A 矩阵 A= [p, p, p] [p, p, p] [p, p, p] >> syms t >> T=sym([t t t t t t t t]); % 创建 T 数组 >> A(:)=T(:) % 以数组全元素赋值方式对矩阵 A 赋值 A= [t, t, t] [t, t, t] [t, t, t]