分式求和python,5.3Python数据处理篇之Sympy系列(三)---简化操作

5.3简化操作

目录

[TOC]

前言

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

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

本章节对应官网的Simplification

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

1.最简化-simplify()

(1)说明:

simplify()是尽可能的让表达式最简化,其最简化的形式是不定的。

(2)源代码:

from sympy import *

x = Symbol('x')

expr1 = cos(x)**2+sin(x)**2

expr2 = (x**3 + x**2 - x - 1)/(x**2 + 2*x + 1)

# 简化表达式

r1 = simplify(expr1)

r2 = simplify(expr2)

print(r1)

print(r2)

(3)输出:

math?formula=cos(x)%5E2%2Bsin(x)%5E2-->1

math?formula=(x%5E3%20%2B%20x%5E2%20-%20x%20-%201)%2F(x%5E2%20%2B%202x%20%2B%201)-->

math?formula=x-1

a7a89b13cfb4

01.png

2.展开-expand()

(1)说明:

expand()是对括号里的多项式进行展开。

(2)源代码:

from sympy import *

x = Symbol('x')

expr1 = (x+1)**2

expr2 = ((x + 1)*(x - 2) - (x - 1)*x)

# 展开

r1 = expand(expr1)

r2 = expand(expr2)

print(r1)

print(r2)

(3)输出:

math?formula=(x%2B1)%5E2-->

math?formula=x%5E2%2B2x%2B1

math?formula=(x%20%2B%201)(x%20-%202)%20-%20(x%20-%201)x-->-2

a7a89b13cfb4

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

math?formula=x%5E%7B3%7D%20-%20x%5E%7B2%7D%20%2B%20x%20-%201-->

math?formula=%5Cleft(x%20-%201%5Cright)%20%5Cleft(x%5E%7B2%7D%20%2B%201%5Cright)

a7a89b13cfb4

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**3

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

math?formula=xy%20%2B%20x%20-%203%20%2B%202x%5E2%20-%20zx%5E2%20%2B%20x%5E3 -->

math?formula=%5Clceil%7Bx%5E%7B3%7D%20-%20x%5E%7B2%7D%20z%20%2B%202%20x%5E%7B2%7D%20%2B%20x%20y%20%2B%20x%7D%5Crceil%20-%203

math?formula=x%5E3%2Bx2-3x%5E2%2Bx%5E3-x%5E2%2Bx4-5 -->

math?formula=%5Clceil%7B2%20x%5E%7B3%7D%20-%204%20x%5E%7B2%7D%20%2B%206%20x%7D%5Crceil%20-%205

a7a89b13cfb4

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

math?formula=%5Cfrac%7Bx%5E%7B2%7D%20%2B%202%20x%20%2B%201%7D%7Bx%5E%7B2%7D%20%2B%20x%7D --》

math?formula=%5Cfrac%7Bx%20%2B%201%7D%7Bx%7D

math?formula=%5Cfrac%7B%5Cfrac%7B3%20x%7D%7B2%7D%20-%202%7D%7Bx%20-%204%7D%20%2B%20%5Cfrac%7B1%7D%7Bx%7D --》

math?formula=%5Cfrac%7B3%20x%5E%7B2%7D%20-%202%20x%20-%208%7D%7B2%20x%5E%7B2%7D%20-%208%20x%7D

a7a89b13cfb4

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

math?formula=%5Cfrac%7B4x%5E3%20%2B%2021x%5E2%20%2B%2010x%20%2B%2012%7D%7Bx%5E4%20%2B%205x%5E3%20%2B%205x%5E2%20%2B%204x%7D

---》

math?formula=%5Cfrac%7B2%20x%20-%201%7D%7Bx%5E%7B2%7D%20%2B%20x%20%2B%201%7D%20-%20%5Cfrac%7B1%7D%7Bx%20%2B%204%7D%20%2B%20%5Cfrac%7B3%7D%7Bx%7D

a7a89b13cfb4

06.png

(二)三角函数的简化

1.三角形的简化-trigsimp()

(1)说明:

使用trigsimp()可以简化三角函数,反三角函数也可以。

(2)源代码:

from sympy import *

x = Symbol('x')

expr1 = sin(x)**2+cos(x)**2

expr2 = 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的latex

print("="*20)

print("expr1-latex:", latex(expr1))

print("r1-latex:", latex(r1))

# r2的latex

print("="*20)

print("expr2-latex:", latex(expr2))

print("r2-latex:", latex(r2))

(3)输出:

math?formula=%5Csin%5E%7B2%7D%7B%5Cleft%20(x%20%5Cright%20)%7D%20%2B%20%5Ccos%5E%7B2%7D%7B%5Cleft%20(x%20%5Cright%20)%7D -->

math?formula=1

math?formula=%5Csin%5E%7B4%7D%7B%5Cleft%20(x%20%5Cright%20)%7D%20-%202%20%5Csin%5E%7B2%7D%7B%5Cleft%20(x%20%5Cright%20)%7D%20%5Ccos%5E%7B2%7D%7B%5Cleft%20(x%20%5Cright%20)%7D%20%2B%20%5Ccos%5E%7B4%7D%7B%5Cleft%20(x%20%5Cright%20)%7D -->

math?formula=%5Cfrac%7B%5Ccos%7B%5Cleft%20(4%20x%20%5Cright%20)%7D%7D%7B2%7D%20%2B%20%5Cfrac%7B1%7D%7B2%7D

a7a89b13cfb4

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

math?formula=%5Csin%7B%5Cleft%20(x%20%2B%20y%20%5Cright%20)%7D -->

math?formula=%5Csin%7B%5Cleft%20(x%20%5Cright%20)%7D%20%5Ccos%7B%5Cleft%20(y%20%5Cright%20)%7D%20%2B%20%5Csin%7B%5Cleft%20(y%20%5Cright%20)%7D%20%5Ccos%7B%5Cleft%20(x%20%5Cright%20)%7D

math?formula=%5Ctan%7B%5Cleft%20(2%20x%20%5Cright%20)%7D -->

math?formula=%5Cfrac%7B2%20%5Ctan%7B%5Cleft%20(x%20%5Cright%20)%7D%7D%7B-%20%5Ctan%5E%7B2%7D%7B%5Cleft%20(x%20%5Cright%20)%7D%20%2B%201%7D

a7a89b13cfb4

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**3

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

math?formula=x%5E2x%5E3 -->

math?formula=x%5E5

math?formula=x%5Eay%5Eb -->

math?formula=%5Cleft(x%20y%5Cright)%5E%7Ba%7D

a7a89b13cfb4

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)**b

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

math?formula=(x%5Ea)%5Eb -->

math?formula=x%5E%7Bab%7D

math?formula=%7B%7Bx%5E2%7D%5Ea%7D%5Eb -->

math?formula=x%5E%7B2ab%7D

a7a89b13cfb4

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

math?formula=x%5E%7Ba%2Bb%7D -->

math?formula=x%5E%7Ba%7D%20x%5E%7Bb%7D

math?formula=%5Cleft(x%20y%5Cright)%5E%7Ba%7D -->

math?formula=x%5E%7Ba%7D%20y%5E%7Ba%7D

a7a89b13cfb4

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

math?formula=log(x)%20%2B%20log(y) -->

math?formula=log(xy)

math?formula=log(x)-log(y) -->

math?formula=%5Clog(xy)

math?formula=n%5Clog(x) -->

math?formula=log(x%5En)

a7a89b13cfb4

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

math?formula=log(xy) -->

math?formula=log(x)%2Blog(y)

math?formula=log(x%2Fy) -->

math?formula=log(x)-%5Clog(y)%E2%80%8B

math?formula=log(x%5En) --> ​

math?formula=n%5Clog(x)

a7a89b13cfb4

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

a7a89b13cfb4

14.png

作者:Mark

日期:2019/03/16 周六

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值