在数学、物理学及力学等各种学科和工程应用中,经常还会遇到符号运算的问题。在MATLAB中,符号运算是为了得到更高精度的数值解,但数值的运算更容易让读者理解,因此在特定的情况下,分别使用符号或数值表达式进行不同的运算。
符号运算是 MATLAB数值计算的扩展,在运算过程中以符号表达式或符号矩阵为运算对象,实现了符号计算和数值计算的相互结合,使应用更灵活。
符号表达式与数值表达式
符号表达式与数值表达式的相互转换主要是通过函数eval和sym实现的。其中,eval函数用于将符号表达式转换成数值表达式,而函数sym用于将数值表达式转换成符号表达式。
符号表达式与数值表达式分别使用函数digits和函数vpa来进行精度设置。
符号矩阵
符号矩阵和符号向量中的元素都是符号表达式,符号表达式是由符号变量与数值组成的。
符号矩阵中的元素是任何不带等号的符号表达式,各符号表达式的长度可以不同。符号矩阵中以空格或逗号分隔的元素指定的是不同列的元素而以分号分隔的元素指定的是不同行的元素。
符号矩阵的生成
1.直接生成法
直接输入符号矩阵时,符号矩阵的每一行都要用方括号括起来,而且要保证同一列的各行元素字符串的长度相同,因此在较短的字符串中要插入空格来补齐长度,否则程序将会报错。
2.用sym函数创建符号矩阵
用这种方法创建符号矩阵,矩阵元素可以是任何不带等号的符号表达式,各矩阵元素之间用逗号或空格分隔,各行之间用分号分隔,各元素字符串的长度可以不相等。常用的调用格式如下:
![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc2hybHhscWw=,size_20,color_FFFFFF,t_70,g_se,x_16](https://i-blog.csdnimg.cn/blog_migrate/5a6d9347e2fc19685e582e695ce2e975.png)
符号矩阵的运算
在 MATLAB中,数值矩阵不能直接参与符号运算,所以必须先转化为符号矩阵。
与数值矩阵一样,符号矩阵可以进行转置、求逆等运算,但符号矩阵的函数与数值矩阵的函数不同。
(1)符号矩阵的转置运算
符号矩阵的转置运算可以通过符号“ ' ”或函数transpos来实现,其调用格式如下。
B=A.'
B=transpos(A)
(2)符号矩阵的行列式运算
符号矩阵的行列式运算可以通过函数determ或det来实现,其中矩阵必须使用方阵,调用格式如下。
d=det(A)
(3)符号矩阵的逆运算
符号矩阵的逆运算可以通过函数inv来实现,其中矩阵必须使用方阵,调用格式如下。
inv(A)
(4)符号矩阵的求秩运算
符号矩阵的求秩运算可以通过函数rank来实现,调用格式如下。
rank(A)
(5)符号矩阵的常用函数运算
符号矩阵的特征值、特征向量运算:可以通过函数eig、eigensys来实现。
符号矩阵的奇异值运算:可以通过函数svd、singavals来实现。
符号矩阵的若尔当(Jordan)标准形运算:可以通过函数jordan来实现。。。。
符号工具箱中还提供了符号矩阵因式分解、展开、合并、简化及通分等符号操作函数。
(1)因式分解
符号矩阵因式分解通过函数factor来实现,其调用格式如下。
factor(S)
(2)符号矩阵展开
符号多项式的展开可以迪过函数expand来实现,其调用格式如下。
expand(S)
对符号矩阵的各元素的符号表达式进行展开。此函数经常用在多项式的表达式中,也常用在三角函数、指数函数、对数函数的展开中。
(3)符号简化
符号简化可以通过函数simple和 simplify来实现,其调用格式如表所示:
(4)分式通分
求解符号表达式的分子和分母可以通过函数numden来实现,其调用格式如下。
【n,d】=numden(A)
把A的各元素转换为分子和分母都是整系数的最佳多项式型。
(5)符号表达式的“秦九韶型”重写
符号表达式的“秦九韶型”重写可以通过函数 horner(P)来实现,其调用格式如下。
horner(P)
将符号多项式转换成嵌套形式表达式。