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

不管是三大數學軟件Matlab(通訊、控制等工程例外)、Maple、Mathematica,仍是三大統計軟件Spass、Stata、SAS,這些可視化的軟件自己就是編程的一個體現,它們在必定程度上下降了咱們使用數學的門檻,但另外一方面它們背後的功能是能夠被編程取代的,而Python在數學和數據科學領域的流行,也是逐漸取代這些軟件的一個過程。html

在職業方面,精算師、金融工程、商業分析、數據分析師、數據挖掘、數據建模、量化工程師、算法工程師、數據產品經理、數據運營、數字營銷、大數據、遊戲開發、人工智能等諸多職業崗位都對數學有要求,可是咱們會發現這些崗位對數學的應用都須要使用到數學軟件以及須要與編程結合,能夠說咱們要應用數學,自然就應該與編程有機結合起來。而在數學、數據領域,因爲Python編程語言的膠水性質以及極爲豐富的第三方庫,Python漸已成爲學數學最值得推薦的編程語言。python

用Python學數學技術專欄就嘗試如何將數學與編程有機結合起來,讓數學的學習迴歸到基礎概念的理解和實際應用之中去。(固然專欄的目的主要是爲數據科學和機器學習等的基礎服務)算法

爲何數學那麼難學且無用?

所謂將數學與編程有機結合,一是在數學學習的方向上就以數學的實際應用爲重心;二是數學在符號上、圖形上等的表現形式應該與編程語言無縫結合。spring

在咱們學生時代的數學教學存在着諸多弊端:編程

  • 一是以往的教育過於強調具體的計算能力,不少數學學得好的,不過是解題高手,一些極其複雜的微分方程、矩陣等還停留在筆算技巧和筆算能力上,並且對數學的應用須要死記硬背大量複雜的數學公式,這無疑加大了數學學習的難度,也偏離了數學本來的方向;在專欄的代數符號運算裏面,咱們就提到過能夠藉助於Sympy這種CAS工具來進行復雜的數學運算,今後數學公式的記憶與筆算再也不是學習的重點;
  • 二是真正好的數學教學是應該要複雜的數學理論知識簡化,國內大學教程相比於國外存在不少不足之處,因此接下來咱們也會推薦一些比較好的數學教程。不少人數學學很差、學不會在很大程度上也與教程對數學概念的講解有必定的關係;
  • 三是結合Python編程是能夠對一些數學的問題進行建模的,經過編程來進行數學建模在前面咱們提到的那麼多職業,他們對數學的要求基礎大可能是微積分、機率統計、線性代數相關的知識,只是在以往的學習裏,咱們看不到數學是如何應用到這些職業裏的; 四是結合Python以及一些數學軟件,咱們能夠作出一些動態圖形,加深你們對數學公式的理解

精選數學教程

到了大學以後,線性代數、機率統計、微積分等數學知識的難度較中學時代更高,整個數學的畫風變化過大,不少概念開始變得難以理解,不知道怎麼忽然就冒出來了,也不知道學了有什麼用。關於這些,其實有一部分是咱們教材的緣由,國內大學教材的編寫者沒有產品經理思惟,沒有切實站在學生的角度、沒有以學生爲中心來寫教材。這裏推薦一些公認比較好的教材:bash

線性代數app

關於線性代數這裏咱們推薦兩個教程,一個是William Gilbert Strang(威廉·吉爾伯特·斯特朗)的視頻教程麻省理工公開課:線性代數,這個視頻教程有配套的教材線性代數導論,價格有點性感,不過不看書也是OK的。Strang是麻省理工MIT的教授,寫過不少經典的數學教材。他親自傳授的這個線性代數課程也是享有盛譽。咱們還能夠在MIT的開放課程裏查看更多關於課程的信息:MIT線性代數課程官網。這個課程還有配套的習題課,在網易雲課堂上也能夠看到MIT線性代數習題課機器學習

二是3Blue1Brown的線性代數的本質。3Blue1Brown是斯坦福大學畢業的一個小哥創辦的Youtube頻道,擅長用直觀的方法來闡述難以理解的概念,很是推薦。編程語言

微積分ide

微積分的課程咱們也一樣是推薦MIT和3Blue1Brown的課程。微積分在MIT分爲單變量微積分和多變量微積分,並且都有配套的習題視頻,在網易雲課堂均可以看到。 單變量微積分單變量微積分習題課多變量微積分多變量微積分習題課。若是想看更多視頻內容也能夠去MIT官網上了解一下,單變量微積分官網多變量微積分官網

3Blue1Brown的微積分的本質講的也是一如既往的好,能夠在學習MIT課程前先看。

統計學

統計學是一門很是重要的知識,這裏咱們推薦Khan Academy可汗學院的統計學教程,雖然也有MIT統計學教程,惋惜的是沒有字幕,若是你聽不懂,能夠去Youtube上藉助AI字幕來看,也能夠去MIT統計學基礎官網上獲取更多資料。還有一個斯坦福大學的統計學習入門(英文字幕)至關不錯。 以上教程可能有的使用的R或MATLAB,這些都是能夠用Python來代替的。

數學公式與圖像展現

有趣的數學圖形

爲了加深咱們對數學公式的理解,咱們一般都須要輔之以一些圖形,好比函數的圖形、幾何圖形、空間圖形等。以往咱們做圖都是經過在紙上手繪一些圖形,不只麻煩,並且很是不精確,更沒法讓圖形根據變量取值的變化來直觀的調整圖形。 好比下面這個公式:

y=x^{\frac{2}{3}}+0.9\sqrt{3.3-x^2}\sin\left(\pi x\right)

爲了手繪出這個圖形,咱們不只要研究這個數學公式的特性(好比最高點、最低點、拐點、凹凸性)、還要經過賦值的方式來肯定圖形的輪廓。固然因爲賦值的有限,圖形天然是沒法作到精準的。這仍是隻有一個變量的狀況下,有時咱們爲了研究數學公式,可能會有多個變量,好比下面的公式除了x這個變量之外,還會有變量b:

y=x^{\frac{2}{3}}+0.9\sqrt{3.3-x^2}\sin\left(b\pi x\right)

因爲公式過於複雜,學生時代數學公式的圖形繪製也花了咱們大量的時間。可是圖形卻又是有必要的,由於它能夠加深咱們對數學公式的理解。其實咱們是能夠藉助於計算機軟件來實現這個公式的圖形的。

心形數學圖形

數學圖形繪製軟件

那上面這個數學公式圖形的動畫效果是怎麼作的呢,可使用DesmosGeogebra 在線版原本繪製,雖然萬能的Wolfram Alpha( Mathematica產品也是該公司的)也能夠作到,不過體驗比較差還收費。Desmos、Geogebra、Wolfram Alpha(收費)都有很是不錯的App產品,很是值得學習數學的朋友使用這些軟件來增進對數學公式、概念等的理解。

Desmos、Geogebra能夠經過虛擬鍵盤的方式來輸入公式,很是方便,並且公式輸入框裏面的公式格式是LaTex,能夠直接複製公式到VS Code的Markdown裏,加上$$$$符號便可顯示,對LaTex不瞭解的童鞋能夠閱讀本專欄用Python學數學裏面的《使用Markdown輸出LaTex數學公式》。同時你也能夠直接把LaTex格式的數學公式直接粘貼到Desmos、Geogebra的數學公式輸入框裏面。好比把下面LaTex格式的數學公式粘貼到數學公式輸入框裏面,將b做爲變量:

x^{\frac{2}{3}}+0.9\sqrt{3.3-x^2}\sin\left(b\pi x\right)
複製代碼

Desmos、Geogebra能夠給數學公式添加變量,你可使用Slider來調整變量的值,圖形會實時繪製並展現出來,堪稱教學神器,之後不再用手繪數學圖形啦~

使用Desmos繪製的圖形

其餘數學相關軟件(含App)

既然都已是互聯網時代了,藉助於PC端在線版本的軟件以及手機端的App來學習數學是理所應當的,在美國等國家,這些數學軟件早已走進了課堂(對中小學數學軟件感興趣的朋友能夠自行搜索整理了解一下,這裏就不介紹了)。

Symbolab:告訴你運算步驟的數學軟件

Symbolab :這是一個高等數學計算器,支持Online版本(也有不錯的App軟件),能夠用來計算一些基礎的代數、函數、三角、微積分等數學公式以及化學公式的運算,它最有特點的功能是能夠給出比較詳細運算的步驟,若是你想計算下列數學公式的值:

\int \left(x^2+ax-3\right)^2dx

用Symbolab來計算,除了能夠得出以下結果:

\int \left(x^2+ax-3\right)^2dx=\frac{ax^4}{2}+\frac{x^5}{5}-2x^3+\frac{a^2x^3}{3}-3ax^2+9x+C

它還會把整個運算步驟的細節也給你展現出來,很是適合學生再作數學習題時,來檢查本身運算步驟是否錯誤,也適合老師出數學習題。

相似這樣的數學軟件還有MathPapa(總體感受比Symbolab要差),Photomath (有手機App,除了能夠拍照識別公式外,也不如Symbolab)、Mathway(也比較通常,手機App卻是不錯)。你也能夠在應用商店經過搜索「Math」來獲取其餘數學App,不過它們的功能和以上所說的這些都是相似的。

Python是萬能的

咱們一直強調的是以上所述全部數學軟件都是能夠被Python取代的(須要GUI圖形點擊操做也能夠,只是比較複雜,不推薦而已),用數學軟件是很難作到與編程結合的,也沒法使用到一些API將數據對接到生產環節裏去。不能與編程結合,數學公式就是死的,不能有效將數據應用到生產實踐裏,數據的商業價值就大打折扣。因此,除了繪製數學圖形外,學習數學就應該徹底與編程有機結合

那Python怎麼繪製數學圖形呢?咱們可使用最經常使用的數據可視化庫matplotlib以及能夠作代數符號運算的Sympy來繪製數學圖形。

使用matplotlib繪製 3x+2x-4的數學圖形:

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))
複製代碼

3x+2x-4的數學圖形

使用Sympy繪製x^2x交叉的數學圖形:

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相比的

相關文章
相關標籤/搜索