內容:本文檔主要介紹sympy軟件包。
讀者:適用於有一定編程基礎的工科學生。
目的:讓學生熟悉sympy軟件包,為解決以后的工科數學問題打下一定的基礎。
簡介:符號化的計算采用的是數學對象符號化的計算方式。這意味者,采用數學對象精確標識而不是近似的,同時它也是包含用帶變量的表達式。
例如,python的math在標准庫中
>>> math.sqrt(8)
2.82842712475
但是,如果采用sympy所提供的方法,你可以得到
>>> sympy.sqrt(8)
2*sqrt(2)
這個的意義在於
>>> math.sqrt(8)*math.sqrt(8)
8.000000000000002
顯然這個數值是不精確的,但是在sympy中,你會看到
>>> sympy.sqrt(8)*sympy.sqrt(8)
8
此外,符號化的計算方式包含常規的求導運算(正如你所見,里面包含符號),積分等。
在后面的教程中,我會一一介紹。
適用讀者:有一定的編程基礎,如果能有python基礎更好。不過, 並不要求很熟練的掌握python,如果你發現學習比較困難,那么再補python吧。
在這個鏈接http://docs.python.org/3/tutorial/index.html中,提供了python的基礎教學。
如果你需要官方的sympy資料,你可以查看這個http://docs.sympy.org/latest/tutorial/index.html
第一部分,軟件包的安裝。
首先你需要安裝python,然后安裝pip,之后在命令行的的終端輸入pip install sympy.
第二部分,通過一些例子來學習sympy
運行python后,
輸入如下:
#this code is first example
from sympy import * #你不需要明白第一行為什么這么寫,因為這個需要了解python ,但是現在你不需要
x = Symbol('x') #符號化的運算對象是數字或者變量,所以當你想使用一個變量前, 你需要這些寫。之后你就可以用x來做符號化的運算了
limit('sin(x)/x',x,0)#來一個簡單的求極限的例子體現一下。
現在我來詳細的解釋下面兩句化的含義。為了方便理解,我不會用計算機的邏輯去解釋。
為了方便理解,你可以理解成一個命題。
例如 貓是哺乳動物。這就是一個簡單的命題。
Symbol('x')你可以理解成x是一個變量(符號) 在寫這個是,一定要記住括號里面用x用英文半角單引號引起來。
p = Symbol('x') 就是我們經常寫的 p: x 是一個變量。這樣一個命題,之后,你就可用用p帶代替這常常的一句話 “x 是一個變量”(Symbol('x'))。
在上面的我們用的是x不是p,這個就是這樣寫 x: x是一個變量。為了防止讀者混淆,我用p來代替x讓讀者明白此x非那個x。
limit('sin(x)/x',x,0)
你可以這樣理解這句話
當表達式為sin(x)/x,並且x(等價於命題:x是一個變量),如果,x趨近於0,那么表達式的值為?
最后你會發現控制台打印出結果
1
如果你不嫌麻煩的化,你也可以這樣寫
>>>limit('sin(x)/x',Symbol('x'),0)
這樣也沒有問題,不過,每次使用limit時,你都需要寫Symbol('x'),這樣,不如寫一個x=Symbol('x'),這樣每次使用x代替那個命題會比較簡便。
先從表達式部分開始說起
每次當打開python之后,先輸入
>>>from sympy import *
然后我們來聲明一個命題並把用x代替它
>>>x = Symbol('x')
現在我們對x這個變量+1得到表達式 x+1,不過,我們沒有指定用誰來代替所得到的結果,所以,結果只會輸出到控制台上
>>>x+1
x + 1
現在我們用expr記住這個結果
>>>expr =x+1
在控制台上你可以這樣寫
>>>expr
x + 1
現在做一點高難度的理解
>>>expr = expr + x
上面結果看上去有點不可思議,不過,你要明白,expr只是記憶一下,着一條命令的最終結果是,expr+x得出結果后,丟棄原來的expr換成新的結果。
我們也可以聲明同時使用多個符號
不過你要看到,在Symbols中x y z之間彼此用空格間隔開。
>>> x,y,z =Symbols('x y z')
並且如果你寫成
>>>x,y = Symbols('y,x')
>>>x
y
>>>y
x
這說明,x代替的是前面的命題 y是符號,y 代表着x是符號,對於大多數的工科學生來說,不要這么寫,容易亂
你只需要
向之前那樣
>>>x = Symbol('x')
>>>y = Symbol('y')
或者
>>>x,y = Symbol('x','y')x + 1
最好不要整那些復雜的方式。
這里有一個注意的事情,對x的更改不會影響后面的expr
>>>x = symbols('x')
>>>expr = x + 1
>>>x = 2
>>>expr
x + 1
就像這樣,x=2以后,expr並不會變成3.因為你讓expr僅記住了x+1,后面的所有對x的操作都不會影響expr。
如果你想得到當x為2時的表達式的值,你可以這樣寫
>>>expr.subs(x,2)#這里的x代替的是Symbol('x'),你在這里會出錯誤,因為上面的x=2已經將此x換成存別的信息了,不再是命題x是一個變量,所以,你需要在用這個之前x=Symbol('x')
3
不過表達式
>>> a = (x + 1)**2#在之前我們有x=Symbol('x')
>>> b = x**2 + 2*x + 1# x**2為x的2次冪
當兩個相減,並不為0。
>>> a-b
-x**2 - 2*x + (x + 1)**2 - 1
為了得到0你需要化解
>>>simplify(a-b)
為了判斷兩個表達式是否相等
>>> a = cos(x)**2 - sin(x)**2
>>> b = cos(2*x)
>>> a.equals(b)