国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用Python學數學之Sympy代數符號運算

Jackwoo / 1162人閱讀

摘要:的符號運算如果之前是學數學相關專業了解計算機代數系統,就會對數學符號的運算比較熟悉,而如果之前是程序員,可能會有點不太明白,下面我們就來了解一下。

在我們初、高中和大學近10年的學習時間里,數學一直占據著非常大的分量,但是回憶過去可以發現,我們把大量的時間都花在反復解題、不斷運算上,計算方法、運算技巧、筆算能力以及數學公式的記憶仿佛成了我們學習數學的全部。這些記憶和技巧沒幾年就忘掉了,但很多人甚至還記得那份陰影;筆算與解題在AI、圖形圖像、數據分析等上被軟件所取代。那我們學生時代的數學還剩下什么呢?
計算器與數學

說起數學計算器,我們常見的是加減乘除四則運算,有了它,我們就可以擺脫筆算和心算的痛苦。四位數以上的加減乘除在數學的原理上其實并不難,但是如果不借助于計算器,光依賴我們的運算能力(筆算和心算),不僅運算的準確度大打折扣,而且還會讓我們對數學的運用停留在一個非常淺的層次。

盡管四則運算如此簡單,但是多位數運算的心算卻在我們生活中被歸為天才般的能力。但是數學的應用應該生活化、普及化,而不是只屬于天才的專利,計算器改變了這一切,這就是計算器的魅力。
計算器還可以做科學運算,比如乘方、開方、指數、對數、三角函數等,盡管這些知識在我們初中時代,通過紙筆也是能運算起來的,但是也僅限于一些極其常用和簡單的運算,一旦復雜起來,通過紙筆來運算就是一項復雜的工程了。所以說,計算器可以讓我們離數學的應用更近

但是我們學生時代所學的數學可遠不止這些,尤其是高等數學(微積分)、線性代數、概率統計等數學知識應用非常廣泛(我也是后來才知道),但是由于他們的運算非常復雜,我們即便掌握了這些知識,想要應用它又談何容易,那有沒有微積分、線性代數、概率統計等的計算器呢?

答案是有的,它們就是計算機代數系統Computer Algebra System,簡稱CAS,Python的Sympy庫也支持帶有數學符號的微積分、線性代數等進行運算。

有了計算器,我們才能真正脫離數學復雜的解題本身,把精力花在對數學原理和應用的學習上,而這才是(在工作方面)數學學習的意義。
計算機代數系統

Sympy可以實現數學符號的運算,用它來進行數學表達式的符號推導和驗算,處理帶有數學符號的導數、極限、微積分、方程組、矩陣等,就像科學計算器一樣簡單,類似于計算機代數系統CAS,雖然CAS通常是可視化軟件,但是維基百科上也把Sympy歸為CAS。

幾大知名的數學軟件比如MathematicaMaximaMatlab(需Symbolic Math Toolbox)Maple等都可以做符號運算,在上篇文章中我們已經拿Python和R、Matlab對比了,顯然Python在指定場景下確實優勢非常明顯,于是我又調研了一下Sympy與Mathematica的比較,在輸入公式以及生成圖表方面,Sympy確實不行(這一點Python有其他庫來彌補),Mathematica能夠做什么,Sympy基本也能做什么。

所以說Python在專業數學(數學、數據科學等)領域,由于其擁有非常多而且強大的第三方庫,構成了一個極其完善的生態鏈,即使是面對世界上最為強勢最為硬核的軟件也是絲毫不虛的。

本專欄用Python學數學的下一期也會介紹一些非常實用的數學工具和數學教材資源,讓數學的學習更簡單更生動。
Sympy的符號運算

如果之前是學數學相關專業了解計算機代數系統CAS,就會對數學符號的運算比較熟悉,而如果之前是程序員,可能會有點不太明白,下面我們就來了解一下。

Sympy與Math函數的區別

我們先來看一下Sympy庫和Python內置的Math函數對數值計算的處理有什么不同。為了讓代碼可執行,下面的代碼都是基于Python3的完整代碼。

import sympy,math
print(math.sqrt(8))
print(sympy.sqrt(8))

執行之后,結果顯示為:

2.8284271247461903
2*sqrt(2)

math模塊是直接求解出一個浮點值,而Sympy則是用數學符號表示出結果,結合LaTex的語法就可以得出我們在課本里最熟悉的的:$2sqrt{2}$。

數學符號與表達式

我們要對數學方程組、微積分等進行運算時,就會遇到變量比如x,y,z,f等的問題,也會遇到求導、積分等代數符號表達式,而Sympy就可以保留變量,計算有代數符號的表達式的。

from sympy import *
x = Symbol("x")
y = Symbol("y")
k, m, n = symbols("k m n")
print(3*x+y**3)

輸出的結果為:3*x + y**3,轉化為LaTex表示法之后結果為$3x+y^3$,輸出的結果就帶有x和y變量。Symbol()函數定義單個數學符號;symbols()函數定義多個數學符號。

折疊與展開表達式

factor()函數可以折疊表達式,而expand()函數可以展開表達式,比如表達式:$x^4+xy+8x$,折疊之后應該是$x(x^3+y+8)$。我們來看具體的代碼:

from sympy import *
x,y = symbols("x y")
expr=x**4+x*y+8*x
f_expr=factor(expr)
e_expr=expand(f_expr)
print(f_expr)
print(e_expr)

表達式的折疊與展開,對應的數學知識就是因式分解,相關的數學知識在人教版初二的教程里。用Python學習數學專欄的目的就是要Python與初高中、大學的數學學習結合起來,讓數學變得更加簡單生動。

表達式化簡

simplify()函數可以對表達式進行化簡。有一些表達式看起來會比較復雜,就拿人教版初二上的一道多項式的乘法為例,簡化$(2x)^3(-5xy^2)$。

from sympy import *
x,y = symbols("x y")
expr=(2*x)**3*(-5*x*y**2)
s_expr=simplify(expr)
print(s_expr)
求解方程組

在人教版的數學教材里,我們初一上會接觸一元一次方程組,初一下就會接觸二元一次方程、三元一次方程組,在初三上會接觸到一元二次方程,使用Sympy的solve()函數就能輕松解題。

解一元一次方程

我們來求解這個一元一次方程組。(題目來源于人教版七年級數學上)
$$6 imes x + 6 imes(x-2000)=150000$$

from sympy import *
x = Symbol("x")
print(solve(6*x + 6*(x-2000)-150000,x))

我們需要掌握Python的代碼符號和數學符號之間的對應關系,解一元一次方程就非常簡單。

解二元一次方程組

我們來看如何求解二元一次方程組。(題目來自人教版七年級數學下)

$$ egin{cases} x+ y =10, 2 imes x+ y=16 end{cases} $$

from sympy import *
x,y = symbols("x y")
print(solve([x + y-10,2*x+y-16],[x,y]))

很快就可以得出{x: 6, y: 4},也就是
$$x=6,y=4$$。

解三元一次方程組

我們來看如何解三元一次方程組。(題目來自人教版七年級數學下)

$$ egin{cases} x+y+z=12, x+2y+5z=22, x=4y. end{cases} $$

執行之后,很快可以得出結果{x: 8, y: 2, z: 2},也就是
$$x=8,y=2,z=2$$

解一元二次方程組

比如我們來求解人教版九年級一元二次方程組比較經典的一個題目,$ax^2+bx+c=0$.

from sympy import *
x,y = symbols("x y")
a,b,c=symbols("a b c")
expr=a*x**2 + b*x + c
s_expr=solve( expr, x)
print(s_expr)

執行之后得出的結果為[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)],我們知道根與系數的關系二次方程會有兩個解,這里的格式就是一個列表。轉為我們常見的數學公式即為:
$$frac{-b+sqrt{-4ac+b^2}}{2a} 、-frac{b+sqrt{-4ac+b^2}}{2a}$$

微積分Calculus

微積分是大學高等數學里非常重要的學習內容,比如求極限、導數、微分、不定積分、定積分等都是可以使用Sympy來運算的。
求極限
Sympy是使用limit(表達式,變量,極限值)函數來求極限的,比如我們要求$lim limits_{x o 0} frac{sinx(x)}{x}$的值。

from sympy import *
x, y, z = symbols("x y z")
expr = sin(x)/x
l_expr=limit(expr, x, 0)
print(l_expr)

執行后即可得到結果為1。

求導

可以使用diff(表達式,變量,求導的次數)函數對表達式求導,比如我們要對$sin(x)e^x$進行$x$求導,以及求導兩次,代碼如下:

from sympy import *
x,y = symbols("x y")
expr=sin(x)*exp(x)
diff_expr=diff(expr, x)
diff_expr2=diff(expr,x,2)
print(diff_expr)
print(diff_expr2)

求導一次的結果就是exp(x)*sin(x) + exp(x)*cos(x),也就是$e^xsin(x)+e^xcos(x)$;求導兩次的結果是2*exp(x)*cos(x),也就是
$$2e^xcosx$$

求不定積分

Sympy是使用integrate(表達式,變量)來求不定積分的,比如我們要求$int(e^xsin{(x)} + e^xcos{(x)}),dx$

from sympy import *
x,y = symbols("x y")
expr=exp(x)*sin(x) + exp(x)*cos(x)
i_expr=integrate(expr,x)
print(i_expr)

執行之后的結果為:exp(x)*sin(x) 轉化之后為:
$$e^xsin(x)$$

求定積分

Sympy同樣是使用integrate()函數來做定積分的求解,只是語法不同:integrate(表達式,(變量,下區間,上區間)),我們來看如果求解
$int_{-infty}^infty sin{(x^2)},dx$

from sympy import *
x,y = symbols("x y")
expr=sin(x**2)
i_expr=integrate(expr, (x, -oo, oo))
print(i_expr)

執行之后的結果為sqrt(2)*sqrt(pi)/2,也就是
$$frac{sqrt{2}sqrt{pi}}{2}$$

Sympy能夠做的也遠不止這些,初高中、大學的數學運算題在Sympy極為豐富的功能里不過只是開胃入門小菜而已。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43468.html

相關文章

  • Python有機結合及統計、微積分、線性代數相關資源、圖形軟件

    摘要:微積分微積分的課程我們也同樣是推薦和的課程。還有一個斯坦福大學的統計學習入門英文字幕相當不錯。所以,除了繪制數學圖形外,學習數學就應該完全與編程有機結合。 無論是三大數學軟件Matlab(通信、控制等工程例外)、Maple、Mathematica,還是三大統計軟件Spass、Stata、SAS,這些可視化的軟件本身就是編程的一個體現,它們在一定程度上降低了我們使用數學的門檻,但另一方面...

    Java3y 評論0 收藏0
  • Python相關教程、開源包推薦與下載

    摘要:在上篇文章里,為大家推薦了一些數學學習的軟件和微積分線性代數概率統計的學習視頻,今天再推薦一些精心挑選的經典教材,并為大家提供電子書的下載鏈接,和視頻搭配起來一起學習,效果會更好。我們要使用的以及等都包含在里面,無需額外下載。 在上篇文章里,為大家推薦了一些數學學習的軟件和微積分、線性代數、概率統計的學習視頻,今天再推薦一些精心挑選的經典教材,并為大家提供電子書的下載鏈接,和視頻搭配起...

    wapeyang 評論0 收藏0
  • 機器習數基礎線代篇——線性代數python手冊(建議收藏)

    摘要:提到線性代數,又不得不吐槽國內教材了,學起來真的是實力勸退。線性代數概念較多,計劃在另一篇總結基本概念,這里僅總結線性代數里一些重要概念的程序。 提到線性代數,又不...

    andot 評論0 收藏0
  • 實現一個【偽】四則運算封閉的符號運算和求解

    摘要:最后實現的符號運算,符號與實數對四則運算封閉,符號與符號對加減封閉多么偷懶啊哈哈哈哈原諒我沒文化上,知道了的通過單元測試要實現方法。 最后的效果: if __name__ == __main__: import doctest doctest.testmod() x = Symbols(x) print(x * 2 + 1 == 8.0 * x + 6)...

    bang590 評論0 收藏0
  • Python開發指南 托管Hadoop集群 UHadoop

    摘要:開發指南開發指南開發指南如果使用進行機器學習方面的數據分析,需要在集群上安裝一些依賴包。以版本為例,安裝方法如下是一款專為科學和工程設計的工具包。以版本為例,安裝方法如下是下,專門面向機器學習的工具包。 developer/pythondev.mdPython開發指南如果使用pyspark進行機器學習方面的數據分析,需要在集群上安裝一些python依賴包。這里將介紹常用的幾個依賴包的安裝方法...

    ernest.wang 評論0 收藏2969

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<