2.4 符号矩阵分析和代数方程解
2.4.1 符号矩阵分析
符号矩阵与数值矩阵存在着区别。例如,创建数值矩阵 A=[1,2;3,4],那么这个矩阵在MATLAB中是可以识别的,然而矩阵A=[a,b;c,d]在MATLAB中则是不可识别的,必须通过符号矩阵进行创建。
一、符号矩阵的创建
在MATLAB中,我们使用sym函数创建符号矩阵,其调用格式如下。
A=sym('[]');
注:(1)符号矩阵的内容与数值矩阵相同。
(2)必须使用sym指令定义符号矩阵。
(3)不能漏掉' '标识。
例如:
A=sym('[a,2*b;3*a,0]')
输出结果为
A =
[ a, 2*b]
[ 3*a, 0]
这里,我们需要注意的是,符号矩阵每一行的两端都有方括号,这是与 MATLAB 数值矩阵的一个重要区别。
除了使用 sym 指令创建符号矩阵,我们仍然可以使用字符串直接创建矩阵,例如创建上述的矩阵A,采用字符串直接创建,我们可以输入如下程序。
A=['[a,2*b]';'[3*a,0]']
程序的输出结果为
A =
[a,2*b]
[3*a,0]
二、符号矩阵的修改
符号矩阵的修改方式有两种,一种是直接修改,另外一种是通过指令的方式进行修改。现将两种修改方式讲解如下。
(1)直接修改。可用←↑找到所要修改的矩阵,直接对矩阵中需要修改的值进行修改。
(2)指令修改。用指令的形式修改符号矩阵,有以下两种调用格式。
① A1=subs(A,'new','old');
② A1=subs(S,'old','new')。
【实例2-11】对于前面所叙述的矩阵 A,将矩阵的第二行第二列的值修改为4b,然后将矩阵中的b用c来代替,试写出其程序。
—附带光盘“Ch2\实例2-11”文件夹
—附带光盘“AVI\实例2-11.avi”
解:程序如下。
A=sym('[a,2*b;3*a,0]'); %创建符号矩阵。
A(2,2)='4*b' %直接修改。
A2=subs(A,'c','b') %将修改之后的值中的b用c来代替。
程序的输出结果如下。
A =
[ a, 2*b]
[ 3*a, 4*b]
A2 =
[ a, 2*c]
[ 3*a, 4*c]
三、符号矩阵与数值矩阵的转换
符号矩阵与数值矩阵之间是可以互相转化的,所用到的函数仍然是 sym 函数,其调用格式为sym(A),其中A为数值矩阵。
【实例2-12】将数值矩阵转化为符号矩阵。
—附带光盘“Ch2\实例2-12”文件夹
—附带光盘“AVI\实例2-12.avi”
解:程序如下。
A=[1/3,2.5;1/0.7,2/5]
sym(A)
程序的输出结果如下。
A =
0.3333 2.5000
1.4286 0.4000
ans =
[ 1/3, 5/2]
[ 10/7, 2/5]
四、符号矩阵分析
最常用的符号矩阵分析函数如表2-1所示。
表2-1 矩阵分析函数
续表
【实例2-13】求符号矩阵的行列式、特征值、逆矩阵。(ad-bc≠0)
—附带光盘“Ch2\实例2-13”文件夹
—附带光盘“AVI\实例2-13.avi”
解:程序如下。
syms a b c d
A=[a b;c d]
det(A) %行列式。
inv(A) %逆矩阵。
[V,D]=eig(A) %特征值和特征向量。
程序运行结果如下。
A =
[ a, b]
[ c, d]
ans =
a*d - b*c
ans =
[ d/(a*d - b*c), -b/(a*d - b*c)]
[ -c/(a*d - b*c), a/(a*d - b*c)]
V =
[ (a/2 + d/2 - (a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)/2)/c - d/c, (a/2 + d/2 +(a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)/2)/c - d/c]
[ 1, 1]
D =
[a/2+d/2-(a^2-2*a*d+d^2+4*b*c)^(1/2)/2, 0]
[ 0, a/2 + d/2 + (a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)/2]