MATLAB 2015从入门到精通
上QQ阅读APP看书,第一时间看更新

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,然后将矩阵中的bc来代替,试写出其程序。

—附带光盘“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') %将修改之后的值中的bc来代替。

程序的输出结果如下。

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]