目錄
電腦代數系統
Sympy的符號運算
求解方程组
微积分Calculus
首頁 後端開發 Python教學 Python中Sympy代數符號運算的介紹

Python中Sympy代數符號運算的介紹

Mar 29, 2019 am 11:04 AM
matlab python 數學

本篇文章帶給大家的內容是關於Python中Sympy代數符號運算的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

在我們初、高中和大學近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的語法就可以得出我們在課本裡最熟悉的:$2\sqrt{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 \times x + 6 \times(x-2000)=150000$$

from sympy import *
x = Symbol('x')
print(solve(6*x + 6*(x-2000)-150000,x))
登入後複製

我们需要掌握Python的代码符号和数学符号之间的对应关系,解一元一次方程就非常简单。

解二元一次方程组

我们来看如何求解二元一次方程组。(题目来自人教版七年级数学下)

$$ \begin{cases} x+ y =10,\\ 2 \times 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$$。

解三元一次方程组

我们来看如何解三元一次方程组。(题目来自人教版七年级数学下)

$$ \begin{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 \to 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^x\sin{(x)} + e^x\cos{(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极为丰富的功能里不过只是开胃入门小菜而已。

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的python视频教程栏目!

以上是Python中Sympy代數符號運算的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

vs code 可以在 Windows 8 中運行嗎 vs code 可以在 Windows 8 中運行嗎 Apr 15, 2025 pm 07:24 PM

VS Code可以在Windows 8上運行,但體驗可能不佳。首先確保系統已更新到最新補丁,然後下載與系統架構匹配的VS Code安裝包,按照提示安裝。安裝後,注意某些擴展程序可能與Windows 8不兼容,需要尋找替代擴展或在虛擬機中使用更新的Windows系統。安裝必要的擴展,檢查是否正常工作。儘管VS Code在Windows 8上可行,但建議升級到更新的Windows系統以獲得更好的開發體驗和安全保障。

visual studio code 可以用於 python 嗎 visual studio code 可以用於 python 嗎 Apr 15, 2025 pm 08:18 PM

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

vscode 擴展是否是惡意的 vscode 擴展是否是惡意的 Apr 15, 2025 pm 07:57 PM

VS Code 擴展存在惡意風險,例如隱藏惡意代碼、利用漏洞、偽裝成合法擴展。識別惡意擴展的方法包括:檢查發布者、閱讀評論、檢查代碼、謹慎安裝。安全措施還包括:安全意識、良好習慣、定期更新和殺毒軟件。

See all articles