![薛定宇教授大讲堂(卷Ⅲ):MATLAB线性代数运算](https://wfqqreader-1252317822.image.myqcloud.com/cover/150/29977150/b_29977150.jpg)
2.3 符号型矩阵的输入方法
前面介绍过,若已建立起数值矩阵A,则可以由B=sym(A)语句将其转换成符号型矩阵。所有数值矩阵均可以通过这种形式转换成符号型矩阵,可以利用符号运算工具箱获得更高精度的解。相反地,一个全数值的符号型矩阵B可以通过命令A1=double(B)转换成双精度矩阵A1。
但是,如果矩阵中含有符号变量,则不能由double()函数进行转换,否则将给出错误信息。
2.3.1 特殊符号矩阵的输入方法
前面介绍的很多特殊矩阵输入函数都可以直接生成符号型矩阵,或由sym()函数转换成符号型矩阵。例如,eye(5)函数可以生成双精度单位矩阵,然后由sym()函数转换成符号型单位矩阵。较新版本的MATLAB还支持一些特殊符号矩阵,例如Vandermonde矩阵、Hankel矩阵和相伴矩阵等的直接输入函数。如果读者使用的版本不支持生成这样的符号型矩阵,则可以使用本书所附的函数vandersym()、hankelsym()和compansym()生成相应的符号型矩阵。
例2-18 试由多项式P(λ)=a1λ7+a2λ6+a3λ5+…+a6λ2+a7λ+a8建立相伴矩阵。
解 可以先由sym()函数生成行向量a,然后由compan()函数直接生成所需的相伴矩阵。这里,由于原始的向量不是首一化的系数向量,MATLAB函数会自动作首一化处理,然后再生成相伴矩阵。
![](https://epubservercos.yuewen.com/2F1B07/16499866904818206/epubprivate/OEBPS/Images/Figure-P35_14459.jpg?sign=1738845831-tM8igJiK5G1n6qXyzL8rA37Y3SN3WSD8-0-ae5d6bec6128ab09b9ed97236580f76d)
得出的相伴矩阵为
![](https://epubservercos.yuewen.com/2F1B07/16499866904818206/epubprivate/OEBPS/Images/Figure-P35_14461.jpg?sign=1738845831-yVvW6z4u9klZTIcY1EyNBqanjtY4T6TR-0-184aec8fde4defa5d7cd18dd42cf6de2)
2.3.2 任意常数矩阵的输入
MATLAB提供的sym()函数除了矩阵类型转换外,还可以生成任意元素aij构成的矩阵,具体的调用格式为
A=sym('a%d%d',[n,m])%其中,%d%d表示双下标
上面的语句可以生成n×m的任意矩阵,其元素为aij,i=1,2,…,n,j=1,2,…,m。如果不给出m,则将生成一个n×n的任意方阵。
类似地,使用下面的命令可以生成任意的行向量v1和列向量v2。
v1=sym('a',[1,n]),v2=sym('a',[n,1]),%第一种方法
v1=sym('a%d',[1,n]),v2=sym('a%d',[n,1]),%第二种方法
例2-19 试输入如下的两个矩阵和一个列向量。
![](https://epubservercos.yuewen.com/2F1B07/16499866904818206/epubprivate/OEBPS/Images/Figure-P36_14462.jpg?sign=1738845831-hO3CybtJkqj6JuXrpbX5ZoKjup5x9rGm-0-32a7875ee22f3cd2d8afad273119a4a7)
解 从给出的要求可见,矩阵A和B都需要双下标,所以需要给出字符串'%d%d'设置。另外,两个矩阵的符号分别为a和f,所以可以用下面的语句直接输入两个矩阵。相比之下,向量v的输入比较简单与直观。
>> A=sym('a%d%d',4), B=sym('f%d%d',[4,2]), v=sym('v',[4,1])
如果想进一步声明满足某种属性的矩阵,还可以用assume()与assumeAlso()函数设定。例如,可以使用下面的命令设置矩阵属性。
>> assume(A,'real'); assumeAlso(A,'integer') %设置其他矩阵属性
其中,这两个函数可以使用的属性为integer(整数)、rational(有理数)、real(实数)与positive(正数)。如果不特别设置,则一般矩阵的默认类型为复数矩阵。
例2-20 试重新输入例2-18中要求的相伴矩阵。
解 由a=sym('a',[1,8])命令就可以声明任意符号型向量,而无须像例2-18那样逐个声明、逐个输入向量元素,即使更大规模的向量也可以这样输入。
>> a=sym('a',[1,20]); A=compan(a) %建立符号型相伴矩阵
例2-21 试建立一个3×6的任意实有理数矩阵。
解 由前面的介绍,不难建立所需的矩阵。
![](https://epubservercos.yuewen.com/2F1B07/16499866904818206/epubprivate/OEBPS/Images/Figure-P36_14464.jpg?sign=1738845831-BFFpxwiLKEvY5IJ8p4fr2udGDd7qLbCL-0-b49b215d32658739b257be196482f369)
2.3.3 任意矩阵函数的输入
sym()函数可以生成任意常数矩阵,根据该函数还可以编写出任意矩阵函数的输入函数。例如,如果想生成矩阵函数M={mij(x,y)},则可以根据需要编写出通用函数any_matrix()。
![](https://epubservercos.yuewen.com/2F1B07/16499866904818206/epubprivate/OEBPS/Images/Figure-P37_14473.jpg?sign=1738845831-BYOdZD8USOaweG2xJf8pFIRsm4lpfxTK-0-581c4bd1b505824802545e65e246c78a)
该函数的调用格式为
A(x1,x2,…,xk)=any_matrix([n,m],'a',x1,x2,…,xk)
其中,n,m为矩阵的行数与列数,如果只给出n,将生成一个方阵。变元x1,x2,…,xk为事先声明的符号变量,a还可以使用任何其他字母,生成的函数矩阵为
![](https://epubservercos.yuewen.com/2F1B07/16499866904818206/epubprivate/OEBPS/Images/Figure-P37_14474.jpg?sign=1738845831-w9h8AQ8DmjCrx3pZc2nAoSnqk0b2BWYl-0-20f233623190d7d0ad473c4fa56a8c53)
例2-22 若先声明符号变量x、y和t,则可以用下面的命令生成函数矩阵。注意,使用矩阵函数的方式输入矩阵。
![](https://epubservercos.yuewen.com/2F1B07/16499866904818206/epubprivate/OEBPS/Images/Figure-P37_14477.jpg?sign=1738845831-riDzgUmb9sSqhp0998sK4kPDFE3ToLkz-0-e783e660b43545799fd19cdb9bf7957f)
生成的任意函数矩阵与向量为
![](https://epubservercos.yuewen.com/2F1B07/16499866904818206/epubprivate/OEBPS/Images/Figure-P37_14475.jpg?sign=1738845831-3om1p59SVZPEqaer2N4vjVYrH88Cj25j-0-0d4779591401a554d25b918dc54c2a8b)