一、符号运算介绍
1、符号运算的特点
(1)符号运算以推理方式进行,不受计算误差累积所带来的困扰。
(2)符号计算可以给出完全正确的封闭解,或任意精度的数值解(封闭解不存在时)。
(3)符号计算指令的调用比较简单,与教科书上的公式相近。
(4)符号计算所需的运行时间相对较长。
2、MATLAB中的符号运算
(1)MATLAB的符号数学工具箱可以完成几乎所有得符号运算功能,如符号表达式的运算、符号矩阵的运算、符号微积分、符号作图、符号代数方程求解、符号微分方程求解等,此外,该工具箱还支持可变精度运算,即支持以指定的精度返回结果。
(2)符号运算举例:
①求一元二次方程的根:
②求函数的一次导数:
③计算在区间[a, b]上的定积分:
二、符号对象与基本符号运算
1、符号对象与符号表达式
(1)在进行符号运算时,必须先定义基本的符号对象,符号对象可以是符号变量、符号表达式等,其中符号表达式是含有符号对象的表达式,符号矩阵/数组是元素为符号表达式的矩阵/数组。
(2)符号对象使用sym、syms进行定义/声明。
①sym用来建立单个符号对象,一般调用格式为“<符号变量> = sym(x)”,参数x可以是一个数或数值矩阵,也可以是字符串。
②syms用来声明多个符号变量,一般调用格式为“syms <符号变量1> <符号变量2> ... <符号变量n>”。
(3)建立符号表达式通常有以下2种方法:
①使用已经定义的符号变量组成符号表达式。
②用sym函数直接建立符号表达式。
(4)符号矩阵(包括矢量):
①符号矩阵可使用sym函数直接生成,也可将数值矩阵转化成符号矩阵。
②符号矩阵中元素的引用和修改操作与数值矩阵相似,这里不再赘述。
2、基本符号运算
(1)MATLAB符号运算采用的运算符和基本函数,在形状、名称和使用上都与数值计算中的运算符和基本函数完全相同。
(2)基本运算符:
(3)基本数学函数:三角函数与反三角函数、指数函数、对数函数等。
三、symvar、subs和vpa
1、symvar
(1)语句“symvar(s)”的作用是按字母顺序列出符号表达式s中的所有符号变量。
(2)语句“symvar(s, N)”的作用是列出符号表达式s中离x最近的N个符号变量(这个距离指的是两个符号变量对应的ASCII码的差距),若有两个符号变量与x的距离相等,则ASCII码大者优先。
2、subs
语句“subs(s,x,a)”的作用是用a替换符号表达式s中的符号变量x,这里的a可以是数值表达式或符号表达式(符号变量若没有声明则需要加上单引号)。
3、vpa
语句“vpa(s,n)”的作用是计算表达式s的值,保留n位有效数字,返回值是符号对象。
四、常见的符号计算
1、因式分解
(1)使用语句“factor(f)”可对符号表达式f进行因式分解。
(2)factor实际上也可用于正整数的分解,但对大整数进行因式分解前需要将其转化成符号常量,否则会报错。
2、函数展开
使用语句“expand(f)”可将符号表达式对应的函数展开。
3、合并同类项
(1)使用语句“collect(f,v)”可对符号表达式f按指定变量v进行合并。
(2)使用语句“collect(f)”可对符号表达式f按默认变量进行合并,此时等效于使用语句“collect(f,1)”。
4、函数简化
(1)使用语句“simplify(f)”可对符号表达式f对应的函数进行化简。
(2)使用语句“y=simple(f)”也可对符号表达式对应的函数进行化简,不过它会对f尝试多种不同的方法(包括simplify)进行简化,以寻求其最简短形式。
(3)使用语句“[N,D]=numden(f)”可对符号表达式f对应的函数进行通分,分子存放在N中,分母存放在D中。
(4)使用语句“horner(f)”可将符号表达式f对应的函数转化为horner多项式。
5、计算极限
极限的计算可使用命令limit,如下所示,其中f为符号表达式,x为符号变量。
6、计算导数
导数的计算可使用命令diff,如下所示,其中f为符号表达式,v为符号变量。
7、计算积分
积分的计算可使用命令int,如下所示,其中f为符号表达式,v为符号变量。
8、级数求和
级数的计算可使用命令symsum,如下所示,其中f为符号表达式,v为符号变量,另外b可以取Inf(无穷大),这样就可以计算无穷级数。
9、反函数
反函数的计算可使用命令symsum,如下所示,其中f为符号表达式,v为符号变量。
10、代数方程求解
(1)solve:
①语句“solve(f,v)”可对方程f = 0以v为求解变量进行求解,如果省略v则是对默认变量进行求解。
②solve也可以用来解方程组,具体语句为“solve(f1,f2, ...,fn, v1,v2, ...,vn)”,其中f为方程组中各方程对应的符号表达式,v为需要求解的变量。
(2)dsolve:
①dsolve可用于求解微分方程,具体语句为“dsolve('eq1','eq2', ... ,'cond1','cond2', ... ,'v')”,其中y为输出的解,eq1、eq2、... 为微分方程,cond1、cond2、... 为初值条件(如果省略初值条件,则表示求通解),v为自变量(如果省略自变量,则默认自变量为t)。
②微分方程中用D表示对自变量的导数,如Dy表示y对自变量的一阶导数,D2y表示y对自变量的二阶导数。
③若dsolve找不到解析解,则返回其积分形式。只有很少一部分微分方程(组)能求出解析解,大部分微分方程(组)只能利用数值方法求数值解。
④dsolve的输出个数只能为一个或与方程个数相等,如果所给的输出个数与方程个数相同,则方程组的解按词典顺序输出,如果只给一个输出,则输出的是一个包含解的结构类型的数据。