首页 > 编程笔记 > MATLAB笔记 阅读:1

MATLAB符号矩阵的创建和访问(附带实例)

在线性代数中,矩阵有特定的数学含义,并且有其严格的运算规则。矩阵的概念是线性代数特有的。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]

相关文章