5.3简化操作
目录
[TOC]
前言
既然sympy是对于符号的运算,那么它对于符号表达式的简化与展开一定很强大。
今天我们学习的是符号表达式的简化与展开。
本章节对应官网的Simplification
(一)有理数与多项式的简化
1.最简化-simplify()
(1)说明:
simplify()是尽可能的让表达式最简化,其最简化的形式是不定的。
(2)源代码:
from sympy import *x = Symbol('x')expr1 = cos(x)**2+sin(x)**2expr2 = (x**3 + x**2 - x - 1)/(x**2 + 2*x + 1)# 简化表达式r1 = simplify(expr1)r2 = simplify(expr2)print(r1)print(r2)
(3)输出:
-->1
-->

01.png
2.展开-expand()
(1)说明:
expand()是对括号里的多项式进行展开。
(2)源代码:
from sympy import *x = Symbol('x')expr1 = (x+1)**2expr2 = ((x + 1)*(x - 2) - (x - 1)*x)# 展开r1 = expand(expr1)r2 = expand(expr2)print(r1)print(r2)
(3)输出:
-->
-->-2

02.png
3.提公因式-factor()
(1)说明:
factor()是对展开的多项式进行提公因式
(2)源代码:
from sympy import *x = Symbol('x')expr1 = (x ** 3 - x ** 2 + x - 1)# 提公因数r1 = factor(expr1)print(r1)print(latex(expr1))print(latex(r1))
(3)输出:
-->

03.png
4.合并同类项-ceiling()
(1)说明:
对于多项式进行合并同类项
(2)源代码:
from sympy import *x = Symbol('x')y = Symbol('y')z = Symbol('z')expr1 = x*y + x - 3 + 2*x**2 - z*x**2 + x**3expr2 = x**3+x*2-3*x**2+x**3-x**2+x*4-5# 合并同类项r1 = ceiling(expr1)r2 = ceiling(expr2)print(r1)print(r2)print(latex(r1))print(latex(r2))
(3)输出:
-->
-->

04.png
5.简化分式-cancel()
(1)说明:
cancle既有约分又有简化的作用
(2)源代码:
from sympy import *x = Symbol('x')expr1 = (x**2 + 2*x + 1)/(x**2 + x)expr2 = 1/x + (3*x/2 - 2)/(x - 4)# 约分消去分式的公因数r1 = cancel(expr1)# 简化分式r2 = cancel(expr2)# 结果print("结果:r1", r1)print("结果:r2", r2)# r1的表达式与结果print("r1的表达式与结果:")print(latex((x**2 + 2*x + 1)/(x**2 + x)))print(latex(r1))# r2的表达式与结果print("\nr2的表达式与结果:")print(latex(1/x + (3*x/2 - 2)/(x - 4)))print(latex(r2))
(3)输出:
--》
--》

05.png
6.分式展开-apart()
(1)说明:
原本只有一项的分式表达式,展开为多项的分式表达式。
(2)源代码:
from sympy import *x = Symbol('x')expr1 = (4*x**3 + 21*x**2 + 10*x + 12)/(x**4 + 5*x**3 + 5*x**2 + 4*x)# 对于分式进行展开r1 = apart(expr1)print(r1)print(latex(r1))print(latex(expr1))
(3)输出:
---》

06.png
(二)三角函数的简化
1.三角形的简化-trigsimp()
(1)说明:
使用trigsimp()可以简化三角函数,反三角函数也可以。
(2)源代码:
from sympy import *x = Symbol('x')expr1 = sin(x)**2+cos(x)**2expr2 = sin(x)**4 - 2*cos(x)**2*sin(x)**2 + cos(x)**4# 进行三角形简化r1 = trigsimp(expr1)r2 = trigsimp(expr2)print("r1:", r1)print("r2:", r2)# r1的latexprint("="*20)print("expr1-latex:", latex(expr1))print("r1-latex:", latex(r1))# r2的latexprint("="*20)print("expr2-latex:", latex(expr2))print("r2-latex:", latex(r2))
(3)输出:
-->
-->

07.png
2.三角形的展开-expand_trig()
(1)说明:
使用expand_trig()可以展开三角函数,同样反三角函数也可以。
(2)源代码:
from sympy import *x = Symbol('x')y = Symbol('y')expr1 = sin(x+y)expr2 = tan(2*x)# 三角形的展开r1 = expand_trig(expr1)r2 = expand_trig(expr2)print("===========r1==========")print(r1)print(latex(expr1))print(latex(r1))print("===========r2==========")print(r2)print(latex(expr2))print(latex(r2))
(3)输出:
-->
-->

08.png
(三)指数函数的简化
1.指数的合并一-powsimp()
(1)说明:
powsimp()主要用于同底数或者同指数
(2)源代码:
from sympy import *# 假设 x与y 是正值, a 是真实的值x = Symbol('x', positive=True)y = Symbol('y', positive=True)a = Symbol('a', real=True)expr1 = x**2*x**3expr2 = x**a*y**a# 进行指数的合并,如果不符合,则不进行简化r1 = powsimp(expr1)r2 = powsimp(expr2)print("===========r1==========")print(r1)print(latex(expr1))print(latex(r1))print("===========r2==========")print(r2)print(latex(expr2))print(latex(r2))
(3)输出:
-->
-->

09.png
2.指数的合并二-powdenest()
(1)说明:
powdenest()主要用于只有一个底数的不同指数。
(2)源代码:
from sympy import *# 假设 x与y 是正值, a 是真实的值x = Symbol('x', positive=True)y = Symbol('y', positive=True)a = Symbol('a', real=True)b = Symbol('b', real=True)expr1 = (x**a)**bexpr2 = (((x**2)**a)**b)# 进行指数的合并,如果不符合,则不进行简化r1 = powdenest(expr1)r2 = powdenest(expr2)print("===========r1==========")print(r1)print(latex(expr1))print(latex(r1))print("===========r2==========")print(r2)print(latex(expr2))print(latex(r2))
(3)输出:
-->
-->

10.png
3.指数的展开:-expand_power_exp\expand_power_base
(1)说明:
- expand_power_exp()用于同底数的展开
- expand_power_base()用于同指数的展开
(2)源代码:
from sympy import *# 假设 x与y 是正值, a 是真实的值x = Symbol('x', positive=True)y = Symbol('y', positive=True)a = Symbol('a', real=True)b = Symbol('b', real=True)expr1 = x**(a+b)expr2 = (x*y)**a# 进行指数的展开# 底数相同展开r1 = expand_power_exp(expr1)# 指数相同展开r2 = expand_power_base(expr2)print("===========r1==========")print(r1)print(latex(expr1))print(latex(r1))print("===========r2==========")print(r2)print(latex(expr2))print(latex(r2))
(3)输出:
-->
-->

11.png
(四)对数函数的简化
1.对数的简化-logcombine()
(1)说明:
logcombine()用于合并对数。
(2)源代码:
from sympy import *# 假设 x与y 是正值, a 是真实的值x = Symbol('x', positive=True)y = Symbol('y', positive=True)n = Symbol('n', real=True)expr1 = log(x) + log(y)expr2 = log(x) - log(y)expr3 = n*log(x)# 对于对数的展开r1 = logcombine(expr1)r2 = logcombine(expr2)r3 = logcombine(expr3)print(r1)print(r2)print(r3)
(3)输出:
-->
-->
-->

12.png
2.对数的展开-expand_log()
(1)说明:
expand_log()用于对数的展开。
(2)源代码:
from sympy import *# 假设 x与y 是正值, a 是真实的值x = Symbol('x', positive=True)y = Symbol('y', positive=True)n = Symbol('n', real=True)expr1 = log(x*y)expr2 = log(x/y)expr3 = log(x**n)# 对于对数的展开r1 = expand_log(expr1)r2 = expand_log(expr2)r3 = expand_log(expr3)print(r1)print(r2)print(r3)
(3)输出:
-->
-->
-->

13.png
(五)其他函数的简化
1.阶乘与排列组合-factorial()\binomial()
(1)说明:
- factorial()用于求阶乘
- binomial()用于求排列组合
(2)源代码:
from sympy import *n = Symbol("n")# 求阶乘r1 = factorial(3)r2 = factorial(n)print(r1)print(r2)# 排列组合print(binomial(4, 2))
(3)输出:

14.png
作者:Mark
日期:2019/03/16 周六
文章转载于:https://www.jianshu.com/p/a7a89b13cfb4
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~