5.3Python數(shù)據(jù)處理篇之Sympy系列(三)---簡(jiǎn)化操作

5.3簡(jiǎn)化操作

目錄

[TOC]

前言

既然sympy是對(duì)于符號(hào)的運(yùn)算,那么它對(duì)于符號(hào)表達(dá)式的簡(jiǎn)化與展開(kāi)一定很強(qiáng)大。

今天我們學(xué)習(xí)的是符號(hào)表達(dá)式的簡(jiǎn)化與展開(kāi)。

本章節(jié)對(duì)應(yīng)官網(wǎng)的Simplification

官網(wǎng)的Simplification

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

(一)有理數(shù)與多項(xiàng)式的簡(jiǎn)化

1.最簡(jiǎn)化-simplify()

(1)說(shuō)明:

simplify()是盡可能的讓表達(dá)式最簡(jiǎn)化,其最簡(jiǎn)化的形式是不定的。

(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)

# 簡(jiǎn)化表達(dá)式
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

01.png

2.展開(kāi)-expand()

(1)說(shuō)明:

expand()是對(duì)括號(hào)里的多項(xiàng)式進(jìn)行展開(kāi)。

(2)源代碼:

from sympy import *

x = Symbol('x')

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

# 展開(kāi)
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

02.png

3.提公因式-factor()

(1)說(shuō)明:

factor()是對(duì)展開(kāi)的多項(xiàng)式進(jìn)行提公因式

(2)源代碼:

from sympy import *

x = Symbol('x')

expr1 = (x ** 3 - x ** 2 + x - 1)

# 提公因數(shù)
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)

03.png

4.合并同類(lèi)項(xiàng)-ceiling()

(1)說(shuō)明:

對(duì)于多項(xiàng)式進(jìn)行合并同類(lèi)項(xiàng)

(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

# 合并同類(lèi)項(xiàng)
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

04.png

5.簡(jiǎn)化分式-cancel()

(1)說(shuō)明:

cancle既有約分又有簡(jiǎn)化的作用

(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)

# 約分消去分式的公因數(shù)
r1 = cancel(expr1)

# 簡(jiǎn)化分式
r2 = cancel(expr2)

# 結(jié)果
print("結(jié)果:r1", r1)
print("結(jié)果:r2", r2)

# r1的表達(dá)式與結(jié)果
print("r1的表達(dá)式與結(jié)果:")
print(latex((x**2 + 2*x + 1)/(x**2 + x)))
print(latex(r1))


# r2的表達(dá)式與結(jié)果
print("\nr2的表達(dá)式與結(jié)果:")
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}

05.png

6.分式展開(kāi)-apart()

(1)說(shuō)明:

原本只有一項(xiàng)的分式表達(dá)式,展開(kāi)為多項(xiàng)的分式表達(dá)式。

(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)

# 對(duì)于分式進(jìn)行展開(kāi)
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}

06.png

(二)三角函數(shù)的簡(jiǎn)化

1.三角形的簡(jiǎn)化-trigsimp()

(1)說(shuō)明:

使用trigsimp()可以簡(jiǎn)化三角函數(shù),反三角函數(shù)也可以。

(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

# 進(jìn)行三角形簡(jiǎn)化
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)輸出:

\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}

07.png

2.三角形的展開(kāi)-expand_trig()

(1)說(shuō)明:

使用expand_trig()可以展開(kāi)三角函數(shù),同樣反三角函數(shù)也可以。

(2)源代碼:

from sympy import *

x = Symbol('x')
y = Symbol('y')

expr1 = sin(x+y)
expr2 = tan(2*x)

# 三角形的展開(kāi)
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}

08.png

(三)指數(shù)函數(shù)的簡(jiǎn)化

1.指數(shù)的合并一-powsimp()

(1)說(shuō)明:

powsimp()主要用于同底數(shù)或者同指數(shù)

(2)源代碼:

from sympy import *

# 假設(shè) x與y 是正值, a 是真實(shí)的值
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


# 進(jìn)行指數(shù)的合并,如果不符合,則不進(jìn)行簡(jiǎn)化
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}

09.png

2.指數(shù)的合并二-powdenest()

(1)說(shuō)明:

powdenest()主要用于只有一個(gè)底數(shù)的不同指數(shù)。

(2)源代碼:

from sympy import *

# 假設(shè) x與y 是正值, a 是真實(shí)的值
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)


# 進(jìn)行指數(shù)的合并,如果不符合,則不進(jìn)行簡(jiǎn)化
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}

10.png

3.指數(shù)的展開(kāi):-expand_power_exp\expand_power_base

(1)說(shuō)明:

  1. expand_power_exp()用于同底數(shù)的展開(kāi)
  2. expand_power_base()用于同指數(shù)的展開(kāi)

(2)源代碼:

from sympy import *

# 假設(shè) x與y 是正值, a 是真實(shí)的值
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


# 進(jìn)行指數(shù)的展開(kāi)
# 底數(shù)相同展開(kāi)
r1 = expand_power_exp(expr1)

# 指數(shù)相同展開(kāi)
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^

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

11.png

(四)對(duì)數(shù)函數(shù)的簡(jiǎn)化

1.對(duì)數(shù)的簡(jiǎn)化-logcombine()

(1)說(shuō)明:

logcombine()用于合并對(duì)數(shù)。

(2)源代碼:

from sympy import *

# 假設(shè) x與y 是正值, a 是真實(shí)的值
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)


# 對(duì)于對(duì)數(shù)的展開(kāi)
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)

12.png

2.對(duì)數(shù)的展開(kāi)-expand_log()

(1)說(shuō)明:

expand_log()用于對(duì)數(shù)的展開(kāi)。

(2)源代碼:

from sympy import *

# 假設(shè) x與y 是正值, a 是真實(shí)的值
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)


# 對(duì)于對(duì)數(shù)的展開(kāi)
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)

13.png

(五)其他函數(shù)的簡(jiǎn)化

1.階乘與排列組合-factorial()\binomial()

(1)說(shuō)明:

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

14.png

作者:Mark

日期:2019/03/16 周六

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,695評(píng)論 0 5
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,302評(píng)論 6 13
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,311評(píng)論 0 10
  • 我寫(xiě)的詩(shī) 我也不知道我寫(xiě)的算不算詩(shī) 很多人都說(shuō)那算個(gè)啥 可是你說(shuō)算 只要是我寫(xiě)的都算 我總是希望你是第一個(gè)看到 因...
    先80閱讀 130評(píng)論 0 0
  • 今天在思考機(jī)會(huì)是留給準(zhǔn)備好的人,但為什麼遇到關(guān)鍵時(shí)刻會(huì)全拋在腦後? 為什麼會(huì)拋在腦後,因位看到大部分的人過(guò)得很好的...
    腦子長(zhǎng)在手上閱讀 150評(píng)論 0 0

友情鏈接更多精彩內(nèi)容