时间: 2020-08-30|24次围观|0 条评论

5.3简化操作

目录

[TOC]

前言

既然sympy是对于符号的运算,那么它对于符号表达式的简化与展开一定很强大。

今天我们学习的是符号表达式的简化与展开。

本章节对应官网的Simplification

官网的Simplification

https://docs.sympy.org/latest/tutorial/simplification.html

(一)有理数与多项式的简化

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)输出:

cos(x)^2+sin(x)^2-->1

(x^3 + x^2 - x - 1)/(x^2 + 2x + 1)-->x-1

5.3Python数据处理篇之Sympy系列(三)—简化操作插图3
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)输出:

(x+1)^2-->x^2+2x+1

(x + 1)(x - 2) - (x - 1)x-->-2

5.3Python数据处理篇之Sympy系列(三)—简化操作插图7
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)输出:

x^{3} - x^{2} + x - 1-->\left(x - 1\right) \left(x^{2} + 1\right)

5.3Python数据处理篇之Sympy系列(三)—简化操作插图10
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)输出:

xy + x - 3 + 2x^2 - zx^2 + x^3 --> \lceil{x^{3} - x^{2} z + 2 x^{2} + x y + x}\rceil - 3

x^3+x2-3x^2+x^3-x^2+x4-5 --> \lceil{2 x^{3} - 4 x^{2} + 6 x}\rceil - 5

5.3Python数据处理篇之Sympy系列(三)—简化操作插图15
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)输出:

\frac{x^{2} + 2 x + 1}{x^{2} + x} --》 \frac{x + 1}{x}

\frac{\frac{3 x}{2} - 2}{x - 4} + \frac{1}{x} --》 \frac{3 x^{2} - 2 x - 8}{2 x^{2} - 8 x}

5.3Python数据处理篇之Sympy系列(三)—简化操作插图20
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)输出:

\frac{4x^3 + 21x^2 + 10x + 12}{x^4 + 5x^3 + 5x^2 + 4x}

---》
\frac{2 x - 1}{x^{2} + x + 1} - \frac{1}{x + 4} + \frac{3}{x}

5.3Python数据处理篇之Sympy系列(三)—简化操作插图23
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)输出:

\sin^{2}{\left (x \right )} + \cos^{2}{\left (x \right )} --> 1

\sin^{4}{\left (x \right )} - 2 \sin^{2}{\left (x \right )} \cos^{2}{\left (x \right )} + \cos^{4}{\left (x \right )} --> \frac{\cos{\left (4 x \right )}}{2} + \frac{1}{2}

5.3Python数据处理篇之Sympy系列(三)—简化操作插图28
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)输出:

\sin{\left (x + y \right )} --> \sin{\left (x \right )} \cos{\left (y \right )} + \sin{\left (y \right )} \cos{\left (x \right )}

\tan{\left (2 x \right )} --> \frac{2 \tan{\left (x \right )}}{- \tan^{2}{\left (x \right )} + 1}

5.3Python数据处理篇之Sympy系列(三)—简化操作插图33
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)输出:

x^2x^3 --> x^5

x^ay^b --> \left(x y\right)^{a}

5.3Python数据处理篇之Sympy系列(三)—简化操作插图38
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)输出:

(x^a)^b --> x^{ab}

{{x^2}^a}^b --> x^{2ab}

5.3Python数据处理篇之Sympy系列(三)—简化操作插图43
10.png

3.指数的展开:-expand_power_exp\expand_power_base

(1)说明:

  1. expand_power_exp()用于同底数的展开
  2. 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)输出:

x^{a+b} --> x^{a} x^{b}

\left(x y\right)^{a} --> x^{a} y^{a}

5.3Python数据处理篇之Sympy系列(三)—简化操作插图47
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)输出:

log(x) + log(y) --> log(xy)

log(x)-log(y) --> \log(xy)

n\log(x) --> log(x^n)

5.3Python数据处理篇之Sympy系列(三)—简化操作插图54
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)输出:

log(xy) --> log(x)+log(y)

log(x/y) --> log(x)-\log(y)​

log(x^n) --> ​n\log(x)

5.3Python数据处理篇之Sympy系列(三)—简化操作插图58
13.png

(五)其他函数的简化

1.阶乘与排列组合-factorial()\binomial()

(1)说明:

  1. factorial()用于求阶乘
  2. binomial()用于求排列组合

(2)源代码:

from sympy import *n = Symbol("n")# 求阶乘r1 = factorial(3)r2 = factorial(n)print(r1)print(r2)# 排列组合print(binomial(4, 2))

(3)输出:

5.3Python数据处理篇之Sympy系列(三)—简化操作插图59
14.png

作者:Mark

日期:2019/03/16 周六

文章转载于:https://www.jianshu.com/p/a7a89b13cfb4

原著是一个有趣的人,若有侵权,请通知删除

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《5.3Python数据处理篇之Sympy系列(三)—简化操作
   

还没有人抢沙发呢~