7.3 符号表达式操作
符号表达式的基本操作包括显示、展开、分解、化简等。这些操作是对数学、物理及各种工程问题进行理论分析时不可缺少的环节。
本节将介绍符号数学工具箱中符号表达式的显示、合并、展开、嵌套、分解和化简操作。
7.3.1 符号表达式显示
在符号表达式的显示过程中,默认采用MATLAB式的显示。除了默认的显示方式,MATLAB符号工具箱中提供了显示函数pretty,允许用户将符号表达式显示为符合一般数学表达习惯的数学表达式。
例7-15:符号表达式显示示例。
在命令行窗口中输入:
syms a b c d e f g h x; f = sym(a * x^3 + b * x^2 + c * x + d + e * x^-1 + f * x^-2 + g * x^-3) pretty(f)
输出结果:
f = d + c*x + a*x^3 + b*x^2 + e/x + f/x^2 + g/x^3
7.3.2 符号表达式合并
MATLAB提供函数实现将符号表达式中的同类项合并的功能,具体调用格式有如下两种。
● R=collect(S):将表达式S中的相同次幂的项合并。其中S可以是一个表达式,也可以是一个符号矩阵。
● R=collect(S,v):将表达式S中v的相同次幂的项进行合并。如果v没有指定,则默认将含有x的相同次幂的项进行合并。
例7-16:符号表达式合并示例。
在命令行窗口中输入:
sym x; f1 = sym((x - 1)^3) collect(f1)
输出结果:
f1 = (x - 1)^3 ans = x^3 - 3*x^2 + 3*x - 1
在命令行窗口中输入:
syms x y t; f2 = sym(x * cos(t) + y * sin(t) + (x^2 + 2 * x * y + 3 * y^2) * t) collect(f2, x)
输出结果:
f2 = t*(x^2 + 2*x*y + 3*y^2) + x*cos(t) + y*sin(t) ans = t*x^2 + (cos(t) + 2*t*y)*x + 3*t*y^2 + sin(t)*y
在命令行窗口中输入:
collect(f2, y)
输出结果:
ans = 3*t*y^2 + (sin(t) + 2*t*x)*y + t*x^2 + cos(t)*x
7.3.3 符号表达式展开
MATLAB提供函数实现将表达式展开的功能,其调用格式如下。
● R=expand(S):将表达式S中的各项进行展开。如果S包含函数,则利用恒等变形将它写成相应的和的形式。该函数多用于多项式,有时也用于三角函数、指数函数和对数函数。
例7-17:符号表达式展开示例。
在命令行窗口中输入:
syms x y; f1 = sym((x - 1)^2 * (y - 1)) expand(f1)
输出结果:
f1 = (x - 1)^2*(y - 1) ans = 2*x + y - 2*x*y + x^2*y - x^2 - 1
在命令行窗口中输入:
f2 = sym(tan(2 * x^2 + y)) expand(f2)
输出结果:
f2 = tan(2*x^2 + y) ans = (tan(y) - (2*tan(x^2))/(tan(x^2)^2 - 1))/((2*tan(x^2)*tan(y))/(tan(x^2)^2 - 1) + 1)
在命令行窗口中输入:
f3 = sym(exp((x + y)^2)) expand(f3)
输出结果:
f3 = exp((x + y)^2) ans = exp(x^2)*exp(y^2)*exp(2*x*y)
在命令行窗口中输入:
f4 = sym(log((x / y)^2)) expand(f4) expand(f4, 'IgnoreAnalyticConstraints', true)
输出结果:
f4 = log(x^2/y^2) ans = log(x^2/y^2) ans = 2*log(x) - 2*log(y)
7.3.4 符号表达式嵌套
MATLAB提供函数实现将符号表达式转换成嵌套形式的功能,其调用格式如下。
● R=horner(S):其中S是符号多项式矩阵,函数horner将其中的每个多项式转换成它们的嵌套形式。
例7-18:符号表达式嵌套示例。
在命令行窗口中输入:
syms x y; f1 = sym(x^3 - 6 * x^2 + 11 * x - 6) horner(f1)
输出结果:
f1 = x^3 - 6*x^2 + 11*x - 6 ans = x*(x*(x - 6) + 11) - 6
在命令行窗口中输入:
f2 = sym([x^2 + x; y^3 - 2 * y]) horner(f2)
输出结果:
f2 = x^2 + x y^3 - 2*y ans = x*(x + 1) y*(y^2 - 2)
7.3.5 符号表达式分解
MATLAB提供函数实现将符号多项式进行因式分解的功能,其调用格式如下。
● factor(X):如果X是一个多项式,系数是有理数,那么该函数将把X表示成系数为有理数的低阶多项式相乘的形式;如果X不能分解成有理多项式乘积的形式,则返回X本身。
例7-19:符号表达式分解示例。
在命令行窗口中输入:
clear syms x y; f1 = sym(2 * x^2 - 7 * x * y - 22 * y^2 - 5 * x + 35 * y - 3) factor(f1)
输出结果:
f1 = 2*x^2 - 7*x*y - 5*x - 22*y^2 + 35*y - 3 ans = [ 2*x - 11*y + 1, x + 2*y - 3]
在命令行窗口中输入:
f2 = sym('1234567890') factor(f2)
输出结果:
f2 = 1234567890 ans = [ 2, 3, 3, 5, 3607, 3803]
7.3.6 符号表达式化简
MATLAB根据一定的规则对符号表达式进行化简,化简的函数为simplify。simplify函数的调用格式如下。
● R=simplify(S):该函数是一个强有力的具有普遍意义的工具。它应用于包含和式、方根、分数的乘方、指数函数、对数函数、三角函数、Bessel函数及超越函数等的表达式,并利用Maple化简规则对表达式进行化简。其中S可以是符号表达式矩阵。
例7-20:符号表达式化简示例。
在命令行窗口中输入:
syms x; f1 = sym((x^3 - 1) / (x - 1)) simplify(f1)
输出结果:
f1 = (x^3 - 1)/(x - 1) ans = x^2 + x + 1
在命令行窗口中输入:
f2 = sym(sin(x)^2 + cos(x)^2) simplify(f2)
输出结果:
f2 = cos(x)^2 + sin(x)^2 ans = 1