SAGE入門:開源數(shù)學(xué)系統(tǒng)之集大成者

自己博客上寫的入門,原文地址:http://cvnote.info/SAGE入門:開源數(shù)學(xué)系統(tǒng)之集大成者

最近在學(xué)習(xí)Sage這款開源數(shù)學(xué)軟件系統(tǒng)胧谈,百度了一下發(fā)現(xiàn)國內(nèi)關(guān)注的還比較少悼凑,所以寫一個Sage的介紹吧。

Sage(http://www.sagemath.org)是一款類似于Maple隙券、Matlab牙肝、Mathematica之類的數(shù)學(xué)軟件唉俗,GPL許可,項(xiàng)目的目標(biāo)是:

Mission: Creating a viable free open source alternative to Magma, Maple, Mathematica and Matlab.

Sage可以干什么配椭?介紹中有這么一句:“這款開源軟件的支持者稱Sage能夠完成從12維物體到計(jì)算全球變暖效應(yīng)數(shù)學(xué)模型中的降雨量的任何事情虫溜。”Sage包含了從線性代數(shù)股缸、微積分衡楞,到密碼學(xué)、數(shù)值計(jì)算敦姻、組合數(shù)學(xué)瘾境、群論、圖論镰惦、數(shù)論等各種初高等數(shù)學(xué)的計(jì)算功能迷守。

Sage的一大特點(diǎn)是整合了眾多優(yōu)秀的開源數(shù)學(xué)軟件,使用戶可以在Sage中方便的使用這些庫中的相應(yīng)功能旺入。Sage目前整合了近一百個開源的數(shù)學(xué)庫兑凿,這其中包括著名的ATLAS凯力、BLAS、LAPACK礼华、Boost沮协、GSL、SciPy等等卓嫂,完整列表可以查看這里。

Sage基于并使用Python聘殖,Python程序可以在Sage中直接運(yùn)行晨雳,也可以在Sage中使用Python的各種庫,感覺就像是提供了一個包含各種數(shù)學(xué)功能的Python環(huán)境奸腺。

使用Sage餐禁,你可以:

下載安裝Sage到本地(下載鏈接)
使用在線版本。Sage目前提供兩種在線平臺突照,分別是早期的The Sage Notebook和最近推出的SageMathCloud
下面是Sage的一些功能帮非。

Sage Notebook

地址:http://www.sagenb.org/

也可以在本地Sage命令行下使用 notebook() 開啟,相當(dāng)于Maple的工作簿W(wǎng)orksheet讹蘑,雖然看著有點(diǎn)簡陋末盔,但功能還是很強(qiáng)大的,可以輸入Sage 命令座慰,渲公式陨舱、顯示圖形等。

Sage Notebook
Sage Notebook

SageMathCloud

地址:https://cloud.sagemath.com/

SageMathCloud類似于一個在線的寫作編程平臺版仔,注冊后可以在里面建立工程游盲,編輯各種源文件。這里建立了一個test工程蛮粮,然后新建了一個.sagews(Sage Worksheet)工作簿文件益缎,界面和Maple的worksheet很像,可以在里面輸入代碼然想,點(diǎn)擊運(yùn)行鍵可以顯示結(jié)果莺奔。

Sage Worksheet
Sage Worksheet

雖然目前還是beta版但是感覺還是挺好用的。除了Worksheet還可以新建terminal又沾,效果和本地的Linux terminal一樣,輸入 sage 可以進(jìn)入Sage命令行弊仪,用法和Python命令行很像,可以使用 help() 和tutorial()產(chǎn)看幫助與教程杖刷。

sage-intro-term
Sage Could Terminal

基本計(jì)算

和大多數(shù)數(shù)學(xué)軟件系統(tǒng)一樣励饵,很簡單易用。比如求2013的質(zhì)因子:

sage : x = 2013
sage : f = factor ( x )
sage : f
3 * 11 * 61
或者矩陣求逆

sage : matrix ( [ [ 1 , 2 ] , [ 3 , 4 ] ] ) ^ ( - 1 )
[ - 2 1 ]
[ 3 / 2 - 1 / 2 ]
符號計(jì)算

Sage的符號計(jì)算非常好用滑燃,可以用 x = var('var_name') 聲明符號變量役听。例如求一個函數(shù)的積分

sage : a = var ( 'a' )
sage : x = var ( 'x' )
sage : f = a * sin ( x ) + 1 / x
sage : f . integrate ( x )

  • a* cos ( x ) + log ( x )
    或者解個方程

sage : solve ( x ^ 2 + a , x )
[ x == - sqrt ( - a ) , x == sqrt ( - a ) ]
繪圖功能

比如畫出上面 f = a * sin(x) + 1 / x 在a=1時,在x=1~10的圖像。 figsize 為圖像大小

sage : f = f . substitute ( a == 1 )
sage : plot ( f , ( x , 1 , 10 ) , figsize = 2 )
可以得到

Sage Plot
Sage Plot

除了2D,Sage還支持3D繪圖典予,具體可以查看文檔甜滨。

基本的數(shù)域與環(huán)

Sage支持在整數(shù)環(huán)( ZZ)、有理數(shù)域( QQ)瘤袖、實(shí)數(shù)域( RR)衣摩、復(fù)數(shù)域( CC),以及更高級的多項(xiàng)式環(huán)捂敌、有限域(Finite Field)等集合上進(jìn)行計(jì)算艾扮。這里要順便復(fù)習(xí)一下抽象代數(shù),比如一些簡單的概念:

sage : QQ . gens ( ) # 有理數(shù)域的單位元和零元素
( 1 , )
sage : QQ . zero ( )
0
sage : CC . gens ( ) # 復(fù)數(shù)域的單位元和零元素
( 1.00000000000000 * I , )
sage : CC . zero ( )
0.000000000000000
運(yùn)算的范圍不同占婉,結(jié)果也不同泡嘴。例如:

: ratpoly . < t > = PolynomialRing ( QQ ) # 定義ratpoly為基于有理數(shù)域上t的多項(xiàng)式環(huán)
sage : realpoly . < z > = PolynomialRing ( RR ) # 定義realpoly為基于實(shí)施域上z的多項(xiàng)式環(huán)
sage : factor ( t ^ 2 - 2 )
t ^ 2 - 2
sage : factor ( z ^ 2 - 2 )
( z - 1.41421356237310 ) * ( z + 1.41421356237310 )
外部軟件/庫接口

對于集成的外部開源數(shù)學(xué)軟件庫,Sage提供的方便的接口進(jìn)行調(diào)用逆济。在Sage中使用這些接口可以方便的將不同語言酌予、不同功能的數(shù)學(xué)軟件庫整合在同一程序中,這也使得Sage集成了眾多開源數(shù)學(xué)軟件之所長奖慌。當(dāng)然這些外部數(shù)學(xué)庫很多都非常專業(yè)抛虫,實(shí)際應(yīng)用中應(yīng)該只會用到其中很有限的一部分。這里舉兩個官網(wǎng)Sage Tutorial里的例子简僧。

用GP/PARI求(本)原根(Primitive root)

GP/PARI是一個做數(shù)論的包(wiki)莱褒。原根是什么呢,上過數(shù)論但是忘了的請面壁:(

抄一下wiki吧還是

在gcd(a,m)=1時涎劈,定義a對模m的指數(shù)Ord_m(a)為使a^d \equiv 1 \pmod{m}成立的最小的正整數(shù)d广凸。由前知Ord_m(a) 一定小于等于 \phi (m),若Ord_m (a) = \phi (m)蛛枚,則稱a是模m的原根谅海。

對正整數(shù)(a,m)=1,如果 a 是模 m 的原根蹦浦,那么 a 是整數(shù)模n乘法群(即加法群 Z/mZ 的可逆元扭吁,也就是所有與 m 互素的正整數(shù)構(gòu)成的等價類構(gòu)成的乘法群)Zn×的一個生成元。

生成元是一個很數(shù)論中很重要的概念盲镶,在一個整數(shù)模n乘法群中侥袜,生成元可以通過不斷與自己相乘(然后再模n),生成群中的所有元素溉贿。元根可以用PARI中的 znprimroot(n) 函數(shù)來求枫吧。

sage : gp ( 'znprimroot(7)' )
Mod ( 3 , 7 )

sage : pari ( 'znprimroot(7)' )
Mod ( 3 , 7 )
得到3是模7乘法群的一個元根。

用Maxima在有理域求矩陣特征向量

Maxima用LISP編寫的計(jì)算機(jī)代數(shù)系統(tǒng) (Computer Algebra System)宇色,前身是Macsyma基显,Matlab和Mathematica等軟件的出現(xiàn)都受到在Macsyma的影響。在Sage中可以方便調(diào)用Maxima代數(shù)系統(tǒng)屎媳。例如下面在求特征向量并轉(zhuǎn)換到有理域向量空間的例子,代碼同樣來自官網(wǎng)Sage Tutorial甥捺,加了一些注釋:

sage : A = maxima ( "matrix ([1, 0, 0], [1, -1, 0], [1, 3, -2])" ) # 生成矩陣
sage : eigA = A . eigenvectors ( ) # 計(jì)算特征響亮
sage : V = VectorSpace ( QQ , 3 ) # V是一個有理數(shù)域上的3維向量空間,
sage : eigA # 輸出格式為[[[特征值],[特征值重?cái)?shù)]],[[特征向量0],[特征向量1],[特征向量2]]]
[ [ [ - 2 , - 1 , 1 ] , [ 1 , 1 , 1 ] ] , [ [ [ 0 , 0 , 1 ] ] , [ [ 0 , 1 , 3 ] ] , [ [ 1 , 1 / 2 , 5 / 6 ] ] ] ]
sage : v1 = V ( sage_eval ( repr ( eigA [ 1 ] [ 0 ] [ 0 ] ) ) ) ; lambda1 = eigA [ 0 ] [ 0 ] [ 0 ]
sage : v2 = V ( sage_eval ( repr ( eigA [ 1 ] [ 1 ] [ 0 ] ) ) ) ; lambda2 = eigA [ 0 ] [ 0 ] [ 1 ]
sage : v3 = V ( sage_eval ( repr ( eigA [ 1 ] [ 2 ] [ 0 ] ) ) ) ; lambda3 = eigA [ 0 ] [ 0 ] [ 2 ]

sage : M = MatrixSpace ( QQ , 3 , 3 ) # M是一個有利數(shù)域上的3×3維的矩陣空間
sage : AA = M ( [ [ 1 , 0 , 0 ] , [ 1 , - 1 , 0 ] , [ 1 , 3 , - 2 ] ] )
sage : b1 = v1 . base_ring ( ) # b1 == QQ 是有理數(shù)域
sage : AA* v1 == b1 ( lambda1 ) * v1 # 驗(yàn)證特征值定義Av = lambda1v
True
sage : b2 = v2 . base_ring ( )
sage : AA* v2 == b2 ( lambda2 ) * v2
True
sage : b3 = v3 . base_ring ( )
sage : AA* v3 == b3 ( lambda3 ) * v3
True
注意到 M() 镀层、 V() 镰禾、 b1() 、 b2() 唱逢、 b3() 都相當(dāng)于類型轉(zhuǎn)換羡微,限定運(yùn)算在有理數(shù)域上進(jìn)行。另外這里的特征向量沒有單位化惶我,因?yàn)槭窃谟欣頂?shù)域上。

與Latex協(xié)同

Sage內(nèi)部可以與Latex協(xié)同博投。對于任意Sage對象foo绸贡,可以通過調(diào)用 latex(foo) 得到其Latex輸出。例如:

sage : var ( 'z' )
z
sage : latex ( z ^ 12 )
z ^ { 12 }
sage : latex ( integrate ( z ^ 4 , z ) )
\ frac { 1 } { 5 } \ , z ^ { 5 }
sage : latex ( 'a string' )
\ verb | a | \ phantom { \ verb ! x ! } \ verb | string |
sage : latex ( QQ )
\ Bold { Q }
sage : latex ( matrix ( QQ , 2 , 3 , [ [ 2 , 4 , 6 ] , [ - 1 , - 1 , - 1 ] ] ) )
\ left ( \ begin { array } { rrr }
2 & 4 & 6 \ \

  • 1 & - 1 & - 1
    \ end { array } \ right )
    類似地毅哗,本地Sage命令行中使用 view(foo) 則會

SageTex Package

通過 \usepackage{sagetex} 在tex文件中使用SageTex Package听怕,可以直接在tex文件中插入Sage命令,并隨Latex輸出結(jié)果到pdf虑绵。具體可參見官方Sage Tutorial尿瞭。

小結(jié)

剛剛發(fā)現(xiàn)Sage的時候覺得很好很強(qiáng)大啊,本身基于Python翅睛,可以使用Python的庫声搁,也會比較好上手。同時又提供了比較方便的接口調(diào)用各種外部的數(shù)學(xué)系統(tǒng)捕发,使得功能十分強(qiáng)大疏旨。另外與Latex的協(xié)同和嵌入功能,Sage Notebook和SageMathCloud等工具也都做得挺好用的扎酷。

我自己不是專業(yè)搞數(shù)學(xué)的檐涝,但是感覺開源項(xiàng)目里面要想出一個Matlab、Mathematica或者M(jìn)aple級別的軟件法挨,估計(jì)就得靠他了谁榜。Sage誕生于2005年,到目前為止國內(nèi)關(guān)注的還很少凡纳,可能一方面是因?yàn)閐ao版的Matlab等軟件實(shí)在太方便了窃植,另一方面因?yàn)閿?shù)學(xué)系統(tǒng)本身涉及許多非常專業(yè)的數(shù)學(xué)知識,一般程序員很少接觸荐糜、專業(yè)人士又很少注開源撕瞧。感覺要是能在大學(xué)課程(比如抽象代數(shù)陵叽、數(shù)論等)中得到使用的話會有比較好的普及效果。

對于我自己來說丛版,平時從事計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)的研究巩掺,大概了解Sage了之后,也發(fā)現(xiàn)大部分純數(shù)學(xué)的功能自己一般很難用上页畦,其中和我做過的工作比較有關(guān)的是有關(guān)代數(shù)幾何中用Groebner basis解多項(xiàng)式方程組的一些東西胖替,不過自己純是外行,不好說能不能用Sage得到什么結(jié)果豫缨。寫這個介紹還是希望Sage能在國內(nèi)有所發(fā)展独令,對相關(guān)的研究人員有所幫助吧。如果對Sage或者計(jì)算機(jī)視覺感興趣好芭,歡迎來訪問我的博客cvnote(http://cvnote.info)燃箭。

一些參考或相關(guān)的鏈接

官方教程:http://www.sagemath.org/doc/tutorial/index.html

官方中文:http://www.sagemath.org/zh/

國內(nèi)博客Lainme’s Blog的教程中文翻譯,博客上還有一些Sage使用的帖子:http://www.lainme.com/doku.php/topic/sage/start

國內(nèi)amao博客男單 618的中文教程翻譯舍败,博客有很多關(guān)于Sage使用的帖子:http://ai7.org/wp/html/682.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末招狸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子邻薯,更是在濱河造成了極大的恐慌裙戏,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厕诡,死亡現(xiàn)場離奇詭異累榜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)灵嫌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門壹罚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寿羞,你說我怎么就攤上這事渔嚷。” “怎么了稠曼?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵形病,是天一觀的道長。 經(jīng)常有香客問我霞幅,道長漠吻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任司恳,我火速辦了婚禮途乃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扔傅。我一直安慰自己耍共,他們只是感情好烫饼,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著试读,像睡著了一般杠纵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钩骇,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天比藻,我揣著相機(jī)與錄音,去河邊找鬼倘屹。 笑死银亲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的纽匙。 我是一名探鬼主播务蝠,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烛缔!你這毒婦竟也來了馏段?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤力穗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后气嫁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體当窗,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年寸宵,在試婚紗的時候發(fā)現(xiàn)自己被綠了崖面。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡梯影,死狀恐怖巫员,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情甲棍,我是刑警寧澤简识,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站感猛,受9級特大地震影響七扰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陪白,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一颈走、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咱士,春花似錦立由、人聲如沸轧钓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毕箍。三九已至,卻和暖如春枣耀,著一層夾襖步出監(jiān)牢的瞬間霉晕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工捞奕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牺堰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓颅围,卻偏偏與公主長得像伟葫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子院促,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • TF API數(shù)學(xué)計(jì)算tf...... :math(1)剛開始先給一個運(yùn)行實(shí)例筏养。tf是基于圖(Graph)的計(jì)算系統(tǒng)...
    MachineLP閱讀 3,471評論 0 1
  • 高中時候,班上有個姑娘常拓,名珊渐溶,長得特好看。漂亮中透著一股靈動弄抬,很是招人茎辐,且性格開朗,屬于人見人愛型掂恕,所以身邊總是有...
    閑倚危樓晉云生閱讀 255評論 1 0
  • 有效的本地 cache 機(jī)制拖陆,可以避免不必要的重復(fù)網(wǎng)絡(luò)加載,不僅能提高相關(guān)應(yīng)用場景的資源加載速度懊亡,也可以避免不必要...
    coderanger閱讀 4,008評論 0 3
  • 又一次在寧波的酒店依啰,上一次在寧海是在2013年了,當(dāng)時是作為采購來供應(yīng)商考核下店枣,看看實(shí)際的能力速警。再上次大概在201...
    娟姐的心語話廊閱讀 1,399評論 0 0
  • 像頭貪婪的怪獸 歷經(jīng)長途跋涉,氣勢洶洶 閃電般鍥入我的身體 時間慢下來鸯两,一切慢下來 慢坏瞄,最慢的是無邊無際的黑夜 那...
    仗劍走天涯y閱讀 559評論 1 10