第7章 符号计算——7.3 符号表达式操作

简介: 第7章 符号计算——7.3 符号表达式操作

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


6319072522a0ea04267f114ebba0786e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png



7.3.2  符号表达式合并


MATLAB提供函数实现将符号表达式中的同类项合并的功能,具体调用格式有如下两种。

● R=collect(S):将表达式S中的相同次幂的项合并。其中S可以是一个表达式,也可以是一个符号矩阵。

● R=collect(S,v):将表达式Sv的相同次幂的项进行合并。如果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根据一定的规则对符号表达式进行化简,化简的函数为simplifysimplify函数的调用格式如下。

● 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

相关文章
|
8月前
第7章 符号计算——7.5 符号函数的操作
第7章 符号计算——7.5 符号函数的操作
|
26天前
分段函数求值
分段函数求值
15 1
|
2月前
|
安全 编译器 程序员
【C++ 编译时有理算术】理解 C++编译时有理数运算:原理、实践与应用
【C++ 编译时有理算术】理解 C++编译时有理数运算:原理、实践与应用
69 1
|
9月前
|
编译器 C语言
【级数求和】C语言解析
【级数求和】C语言解析
76 0
|
6月前
|
C语言
C语言操作符优先级表格(建议收藏,每次看一下)
C语言操作符优先级表格(建议收藏,每次看一下)
|
8月前
|
资源调度
第7章 符号计算——7.4 符号表达式替换
第7章 符号计算——7.4 符号表达式替换
|
8月前
|
Java
第7章 符号计算——7.2 符号对象和符号表达式(2)
第7章 符号计算——7.2 符号对象和符号表达式(2)
|
8月前
|
存储
第7章 符号计算——7.2 符号对象和符号表达式(1)
第7章 符号计算——7.2 符号对象和符号表达式(1)
|
10月前
|
机器学习/深度学习 Cloud Native Go
779. 第K个语法符号:简单模拟
这是 力扣上的 779. 第K个语法符号,难度为 中等。
|
11月前
|
C语言 C++
C++ 链接库顺序导致的符号未定义问题
C++ 链接库顺序导致的符号未定义问题
84 0