[摘要]第6章 符号运算 6.1 符号对象的创建和使用 6.2 符号对象的运算 6.3 符号表达式的变换 6.4 符号微积分、极限和级数 6.5 符号积分变换 6.6 符号方程的求解 6.7 符号函数的可视化 符号运算的对象是非数值的符号对象,对于像公式推导和因式分解等抽象的运算都可以通过符号运算来解决。
MATLAB 2006b对应的是Symbolic Math Toolbox 3.1.5。
符号工具箱能够实现微积分运算、线性代数、表达式的化简、求解代数方程和微分方程、不同精度转换和积分变换,符号计算的结果可以以图形化显示,MATLAB的符号运算功能十分完整和方便。
符号运算的特点: (1)符号运算以推理解析的方式进行,计算的结果不受计算累积误差影响; (2)符号计算可以得出完全正确的封闭解和任意精度的数值解; (3)符号计算命令调用简单; (4)符号计算所需要的时间较长。
6.1 符号对象的创建和使用 创建符号对象都可以使用sym和syms函数来实现。
1. sym函数 S=sym(s,参数) %由数值创建符号对象 S=sym(‘s’,参数)%由字符串创建符号对象 当被转换的s是数值时,参数可以是'd'、'f'、'e'或'r' 四种格式,当被转换的's'是字符串时,参数可以是'real'、'unreal'和'positive'三种格式 2. syms函数 syms(s1,s2,s3,…,参数) 或 syms s1,s2,s3,…,参数%创建多个符号变量 syms与sym的关系是:syms(s1,s2,s3,…,参数)等同于s1=sym('s1',参数),s2=sym('s2',参数)…… 3. class函数 s=class(x) %返回对象x的数据类型 6.1.2 符号常量和符号变量 符号常量是不含变量的符号表达式,用sym函数来创建;符号变量使用sym和syms函数来创建。
例如: >> a1=sym(sin(2)) %用数值创建符号常量 >> a2=sym(sin(2),'f') %用十六进制浮点表示 >> a1=sym('a','unreal') %用字符串创建符号变量 6.1.3 符号表达式 符号表达式是由符号常量和符号变量等构成的表达式,使用sym和syms函数来创建。
例6-3 分别使用sym和syms函数创建符号表达式。
>> syms a b c x >> f1=a*x^2+b*x+c f1 = a*x^2+b*x+c >> f2=sym('y^2+y+1') %创建符号表达式 f2 = y^2+y+1 >> f3=sym('sin(z)^2+cos(z)^2=1')%创建符号方程 f3 = sin(z)^2+cos(z)^2=1 6.1.4 符号矩阵 符号矩阵的元素是符号对象,符号矩阵可以用sym和syms函数来创建。
>> A=sym('[a,b;c,d]') A = [ a, b] [ c, d] 6.2 符号对象的运算 6.2.1 符号对象的基本运算 1. 算术运算 (1)“+”,“-”,“*”,“\”,“/”,“^” (2)“.*”,“./”,“.\”,“.^” (3)“′”,“.′” 2. 关系运算 只有运算符“= =”、“~=”分别对符号对象进行“相等”、“不等”的比较。
3. 三角函数、双曲函数和相应的反函数 三角函数包括sin、cos和tan,双曲函数包括sinh、cosh和tanh,反三角函数asin、acos、atan。
4. 指数和对数函数 sqrt exp expm log log10 log2 5. 复数函数 conj real imag abs,为提供求相角命令。
6. 矩阵代数命令 与数值计算中的命令几乎完全一样。
例: >> A=sym('[a,b;c,d]'); >> B=sym('[1 2;3 4]'); >> C=A+B C = [ a+1, b+2] [ c+3, d+4] 6.2.2 任意精度的算术运算 1. 符号工具箱的算术运算方式 (1)数值型 数值型的算术运算是matlab中的浮点运算,运算快、占用内存小,但结果不精确。
(2)有理数型 有理数型的算术运算是maple中的精确符号运算,运算时间、占用内存都是最大的,结果非常准确。
(3)VPA型 VPA型的算术运算是maple中的任意精度运算,可任意设置有效精度,运算时间、占用内存随有效位数的增加而增加。
2. 不同类型对象的转换 (1)获得VPA型对象 digits(n) %设定n位有效位数的精度 S=vpa(s,n) %将s按n位有效位数计算得出符号对象S 例: >> digits %显示默认精度 Digits = 32 >> q=sym('sqrt(2)')