無論是三大數(shù)學軟件Matlab(通信肺然、控制等工程例外)蔫缸、Maple、Mathematica际起,還是三大統(tǒng)計軟件Spass拾碌、Stata、SAS街望,這些可視化的軟件本身就是編程的一個體現(xiàn)校翔,它們在一定程度上降低了我們使用數(shù)學的門檻,但另一方面它們背后的功能是可以被編程取代的灾前,而Python在數(shù)學和數(shù)據(jù)科學領域的流行防症,也是逐漸取代這些軟件的一個過程。
在職業(yè)方面哎甲,精算師蔫敲、金融工程、商業(yè)分析炭玫、數(shù)據(jù)分析師奈嘿、數(shù)據(jù)挖掘、數(shù)據(jù)建模吞加、量化工程師指么、算法工程師、數(shù)據(jù)產(chǎn)品經(jīng)理榴鼎、數(shù)據(jù)運營伯诬、數(shù)字營銷、大數(shù)據(jù)巫财、游戲開發(fā)盗似、人工智能等諸多職業(yè)崗位都對數(shù)學有要求,但是我們會發(fā)現(xiàn)這些崗位對數(shù)學的應用都需要使用到數(shù)學軟件以及需要與編程結(jié)合平项,可以說我們要應用數(shù)學赫舒,天然就應該與編程有機結(jié)合起來悍及。而在數(shù)學、數(shù)據(jù)領域接癌,由于Python編程語言的膠水性質(zhì)以及極為豐富的第三方庫心赶,Python漸已成為學數(shù)學最值得推薦的編程語言。
用Python學數(shù)學技術專欄就嘗試如何將數(shù)學與編程有機結(jié)合起來缺猛,讓數(shù)學的學習回歸到基礎概念的理解和實際應用之中去缨叫。(當然專欄的目的主要是為數(shù)據(jù)科學和機器學習等的基礎服務)
為什么數(shù)學那么難學且無用?
所謂將數(shù)學與編程有機結(jié)合荔燎,一是在數(shù)學學習的方向上就以數(shù)學的實際應用為重心耻姥;二是數(shù)學在符號上、圖形上等的表現(xiàn)形式應該與編程語言無縫結(jié)合有咨。
在我們學生時代的數(shù)學教學存在著諸多弊端:
- 一是以往的教育過于強調(diào)具體的計算能力琐簇,很多數(shù)學學得好的,不過是解題高手座享,一些極其復雜的微分方程婉商、矩陣等還停留在筆算技巧和筆算能力上,而且對數(shù)學的應用需要死記硬背大量復雜的數(shù)學公式渣叛,這無疑加大了數(shù)學學習的難度据某,也偏離了數(shù)學原本的方向;在專欄的代數(shù)符號運算里面诗箍,我們就提到過可以借助于Sympy這種CAS工具來進行復雜的數(shù)學運算,從此數(shù)學公式的記憶與筆算不再是學習的重點挽唉;
- 二是真正好的數(shù)學教學是應該要復雜的數(shù)學理論知識簡化滤祖,國內(nèi)大學教程相比于國外存在很多不足之處,所以接下來我們也會推薦一些比較好的數(shù)學教程瓶籽。很多人數(shù)學學不好匠童、學不會在很大程度上也與教程對數(shù)學概念的講解有一定的關系;
- 三是結(jié)合Python編程是可以對一些數(shù)學的問題進行建模的塑顺,通過編程來進行數(shù)學建模在前面我們提到的那么多職業(yè)汤求,他們對數(shù)學的要求基礎大多是微積分、概率統(tǒng)計严拒、線性代數(shù)相關的知識扬绪,只是在以往的學習里,我們看不到數(shù)學是如何應用到這些職業(yè)里的裤唠;
四是結(jié)合Python以及一些數(shù)學軟件挤牛,我們可以做出一些動態(tài)圖形,加深大家對數(shù)學公式的理解
精選數(shù)學教程
到了大學之后种蘸,線性代數(shù)墓赴、概率統(tǒng)計竞膳、微積分等數(shù)學知識的難度較中學時代更高,整個數(shù)學的畫風變化過大诫硕,很多概念開始變得難以理解坦辟,不知道怎么突然就冒出來了,也不知道學了有什么用章办。關于這些锉走,其實有一部分是我們教材的原因,國內(nèi)大學教材的編寫者沒有產(chǎn)品經(jīng)理思維纲菌,沒有切實站在學生的角度挠日、沒有以學生為中心來寫教材。這里推薦一些公認比較好的教材:
線性代數(shù)
關于線性代數(shù)這里我們推薦兩個教程翰舌,一個是William Gilbert Strang(威廉·吉爾伯特·斯特朗)的視頻教程麻省理工公開課:線性代數(shù)嚣潜,這個視頻教程有配套的教材線性代數(shù)導論,價格有點性感,不過不看書也是OK的椅贱。Strang是麻省理工MIT的教授懂算,寫過很多經(jīng)典的數(shù)學教材。他親自傳授的這個線性代數(shù)課程也是享有盛譽庇麦。我們還可以在MIT的開放課程里查看更多關于課程的信息:MIT線性代數(shù)課程官網(wǎng)计技。這個課程還有配套的習題課,在網(wǎng)易云課堂上也可以看到MIT線性代數(shù)習題課
二是3Blue1Brown的線性代數(shù)的本質(zhì)山橄。3Blue1Brown是斯坦福大學畢業(yè)的一個小哥創(chuàng)辦的Youtube頻道垮媒,擅長用直觀的方法來闡述難以理解的概念,非常推薦航棱。
微積分
微積分的課程我們也同樣是推薦MIT和3Blue1Brown的課程睡雇。微積分在MIT分為單變量微積分和多變量微積分,而且都有配套的習題視頻饮醇,在網(wǎng)易云課堂都可以看到它抱。
單變量微積分、單變量微積分習題課朴艰、多變量微積分观蓄、多變量微積分習題課。如果想看更多視頻內(nèi)容也可以去MIT官網(wǎng)上了解一下祠墅,單變量微積分官網(wǎng)侮穿、多變量微積分官網(wǎng)。
3Blue1Brown的微積分的本質(zhì)講的也是一如既往的好毁嗦,可以在學習MIT課程前先看撮珠。
統(tǒng)計學
統(tǒng)計學是一門非常重要的知識,這里我們推薦Khan Academy可汗學院的統(tǒng)計學教程,雖然也有MIT統(tǒng)計學教程,可惜的是沒有字幕芯急,如果你聽不懂勺届,可以去Youtube上借助AI字幕來看,也可以去MIT統(tǒng)計學基礎官網(wǎng)上獲取更多資料娶耍。還有一個斯坦福大學的統(tǒng)計學習入門(英文字幕)相當不錯免姿。
以上教程可能有的使用的R或MATLAB,這些都是可以用Python來代替的榕酒。
數(shù)學公式與圖像展示
有趣的數(shù)學圖形
為了加深我們對數(shù)學公式的理解胚膊,我們通常都需要輔之以一些圖形,比如函數(shù)的圖形想鹰、幾何圖形紊婉、空間圖形等。以往我們作圖都是通過在紙上手繪一些圖形辑舷,不僅麻煩喻犁,而且非常不精確,更無法讓圖形根據(jù)變量取值的變化來直觀的調(diào)整圖形何缓。
比如下面這個公式:
為了手繪出這個圖形肢础,我們不僅要研究這個數(shù)學公式的特性(比如最高點、最低點碌廓、拐點传轰、凹凸性)、還要通過賦值的方式來確定圖形的輪廓谷婆。當然由于賦值的有限慨蛙,圖形自然是無法做到精準的。這還是只有一個變量的情況下纪挎,有時我們?yōu)榱搜芯繑?shù)學公式期贫,可能會有多個變量,比如下面的公式除了x這個變量以外廷区,還會有變量b:
由于公式過于復雜,學生時代數(shù)學公式的圖形繪制也花了我們大量的時間贾铝。但是圖形卻又是有必要的隙轻,因為它可以加深我們對數(shù)學公式的理解。其實我們是可以借助于計算機軟件來實現(xiàn)這個公式的圖形的垢揩。
數(shù)學圖形繪制軟件
那上面這個數(shù)學公式圖形的動畫效果是怎么做的呢玖绿,可以使用Desmos或Geogebra 在線版本來繪制,雖然萬能的Wolfram Alpha( Mathematica產(chǎn)品也是該公司的)也可以做到叁巨,不過體驗比較差還收費斑匪。Desmos、Geogebra锋勺、Wolfram Alpha(收費)都有非常不錯的App產(chǎn)品蚀瘸,非常值得學習數(shù)學的朋友使用這些軟件來增進對數(shù)學公式狡蝶、概念等的理解。
Desmos贮勃、Geogebra可以通過虛擬鍵盤的方式來輸入公式贪惹,非常方便,而且公式輸入框里面的公式格式是LaTex寂嘉,可以直接復制公式到VS Code的Markdown里奏瞬,加上$$$$
符號即可顯示,對LaTex不了解的童鞋可以閱讀本專欄用Python學數(shù)學里面的《使用Markdown輸出LaTex數(shù)學公式》泉孩。同時你也可以直接把LaTex格式的數(shù)學公式直接粘貼到Desmos硼端、Geogebra的數(shù)學公式輸入框里面。比如把下面LaTex格式的數(shù)學公式粘貼到數(shù)學公式輸入框里面寓搬,將b作為變量:
x^{\frac{2}{3}}+0.9\sqrt{3.3-x^2}\sin\left(b\pi x\right)
Desmos珍昨、Geogebra可以給數(shù)學公式添加變量,你可以使用Slider來調(diào)整變量的值订咸,圖形會實時繪制并展示出來曼尊,堪稱教學神器,以后再也不用手繪數(shù)學圖形啦~
其他數(shù)學相關軟件(含App)
既然都已經(jīng)是互聯(lián)網(wǎng)時代了脏嚷,借助于PC端在線版本的軟件以及手機端的App來學習數(shù)學是理所應當?shù)穆嫫玻诿绹葒遥@些數(shù)學軟件早已走進了課堂(對中小學數(shù)學軟件感興趣的朋友可以自行搜索整理了解一下父叙,這里就不介紹了)神郊。
Symbolab:告訴你運算步驟的數(shù)學軟件
Symbolab :這是一個高等數(shù)學計算器,支持Online版本(也有不錯的App軟件)趾唱,可以用來計算一些基礎的代數(shù)涌乳、函數(shù)、三角甜癞、微積分等數(shù)學公式以及化學公式的運算夕晓,它最有特色的功能是可以給出比較詳細運算的步驟,如果你想計算下列數(shù)學公式的值:
用Symbolab來計算悠咱,除了可以得出如下結(jié)果:
它還會把整個運算步驟的細節(jié)也給你展示出來蒸辆,非常適合學生再做數(shù)學習題時,來檢查自己運算步驟是否錯誤析既,也適合老師出數(shù)學習題躬贡。
類似這樣的數(shù)學軟件還有MathPapa(整體感覺比Symbolab要差),Photomath (有手機App眼坏,除了可以拍照識別公式外拂玻,也不如Symbolab)、Mathway(也比較一般,手機App倒是不錯)檐蚜。你也可以在應用商店通過搜索“Math”來獲取其他數(shù)學App魄懂,不過它們的功能和以上所說的這些都是類似的。
Python是萬能的
我們一直強調(diào)的是以上所述所有數(shù)學軟件都是可以被Python取代的(需要GUI圖形點擊操作也可以熬甚,只是比較復雜逢渔,不推薦而已),用數(shù)學軟件是很難做到與編程結(jié)合的乡括,也無法使用到一些API將數(shù)據(jù)對接到生產(chǎn)環(huán)節(jié)里去肃廓。不能與編程結(jié)合,數(shù)學公式就是死的诲泌,不能有效將數(shù)據(jù)應用到生產(chǎn)實踐里盲赊,數(shù)據(jù)的商業(yè)價值就大打折扣。所以敷扫,除了繪制數(shù)學圖形外哀蘑,學習數(shù)學就應該完全與編程有機結(jié)合。
那Python怎么繪制數(shù)學圖形呢葵第?我們可以使用最常用的數(shù)據(jù)可視化庫matplotlib以及可以做代數(shù)符號運算的Sympy來繪制數(shù)學圖形绘迁。
使用matplotlib繪制 的數(shù)學圖形:
import numpy as np
import matplotlib.pyplot as plt
def graph(formula, x_range):
x = np.array(x_range)
y = eval(formula)
plt.plot(x, y)
plt.show()
graph('x**3+2*x-4', range(-10, 11))
使用Sympy繪制和交叉的數(shù)學圖形:
from sympy import symbols
from sympy.plotting import plot
x = symbols('x')
p1 = plot(x*x, show=False)
p2 = plot(x, show=False)
p1.append(p2[0])
p1.show()
另:使用Python的Sympy Gamma也同樣獲得解題的詳細步驟,不過使用體驗上是沒法和Symbolab相比的