2011-07-31 65 views
4

我是一位自學成才的開發人員(現在約3年),我想通過學習如何將數學方程寫入代碼來提高自己的開發技能。關於將數學方程寫入代碼的建議

這件事繼續困擾着我,我看到許多書籍和文章伴隨着發光的數學方程,它們看起來真的很有趣。我可以閱讀其中的部分內容(乘法,除法,小數點,西格瑪,變量),但是在執行代碼時遇到麻煩。

例如,如何開始瞭解這些類型的方程式:http://en.wikipedia.org/wiki/Manhattan_distance並將其寫入代碼?

任何推薦的地方開始?這不是代碼問題,但缺乏基本的數學理解?我願意傾聽和閱讀,因爲我覺得這種能力對於開發者來說非常重要。

+0

如果你只是想知道是什麼符號的含義,有維基百科的[數學符號列表](http://en.wikipedia.org/wiki/List_of_mathematical_symbols)。但是如果你想了解背後的概念......好吧,如果你可以自學編程,你可以自學數學! –

+0

嗯,這有助於很多,謝謝!我很感激小費,有什麼具體的數學方向我應該去學習? *看到,因爲有像代數,微積分,統計學這麼多樹枝... * – Dreamslash

+0

http://www.amazon.co.uk/Mathematics-Physics-Programmers-Danny-Kodicek/dp/1435457331 – vascowhite

回答

11
I can read parts of them (multiplication, division, decimals, sigma, variables) 
but I have troubles when going off to implement them in code. 

嗯,我想關鍵的事情是,你需要能夠打破你有興趣到它的組成部件的公式,如果你能理解如何單獨對這些代碼進行編碼,然後您就能夠以代碼的形式將它們粘合在一起。

讓我們以二維空間中兩點間的曼哈頓距離爲例,用固定的(x, y)座標系統。你想寫一個函數,將需要兩點,並給你曼哈頓之間的距離之間的點。讓我們放棄使用面向對象的概念,這裏只是假設你有四個輸入變量:

x1, the x-coordinate of the first point 
y1, the y-coordinate of the first point 
x2, the x-coordinate of the second point 
y2, the y-coordinate of the second point 

所以我們的功能就會像

function mdistance (x1, y1, x2, y2) { 
    ??? 
} 

應該採取什麼功能的內部(函數身體)看起來像?現在我們檢查一下我們想要作爲代碼重寫的數學公式。維基百科的版本(在「形式描述」下)處理任意維度的情況 - 我們也可以這樣做,但現在我們只考慮二維情況。所以他們的n是2,就我們而言,我們想要計算|x1 - x2| + |y1 - y2|。這是丟失西格瑪符號而贊成描述帶有兩個加數的和的表達式的結果。但是我們仍然沒有計算出如何在計算機代碼中表達|a - b|

所以,現在的功能可能看起來像

function mdistance (x1, y1, x2, y2) { 
    return bars(x1, x2) + bars(y1, y2); 
} 

而這,儘可能去,是好的,因爲我們已經分離出我們還不知道該怎麼做,因爲另一個函數的東西,稱爲bars()。一旦我們定義bars(),功能mdistance()會工作得很好,假設,當然,我們對bars()定義是明智的。所以問題只是定義bars()。通過將問題分解爲其組成部分,我們使工作變得更加簡單,因爲我們只需要使每個部分都能夠工作 - 這比將所有內容一次性工作更簡單。

那麼我們應該如何bars()界定?那麼,|a - b|只是表達了「a - b的絕對值」的想法。 PHP有一個實數的絕對值的內置函數;它是abs()。所以我們定義bars()這樣的:

function bars (a, b) { 
    return abs(a - b); 
} 

現在,我們的功能mdistance()的工作只是我們想要的方式。

+0

令人驚歎。感謝您花時間寫這篇文章,這真的很有幫助。 在這一點上,我理解它就像解碼一個程序,以瞭解它是如何工作的,正如你所提到的。假設這種能力伴隨着練習和學習,我將不再嘗試編寫簡單的數學算法。你會有任何你認爲很簡單的開始? – Dreamslash

+0

那麼,如果你想練習將數學表達式轉換成代碼,基本統計提供了相當多的材料。嘗試使用編碼函數來計算一組實數的平均值,方差和標準偏差。 (您可能想要使用PHP的數組函數來使其工作。)對於一個挑戰,請嘗試編寫一個函數來計算兩組數據的產品時刻相關係數。 (要做到這一點,你真的會想把任務分解成更小的任務,因爲PMCC的公式很大且很複雜。) – Hammerite

0

使用sin(),cos(),sqrt()

對於你需要的載體array()和你需要一個循環的總和(for/foreach)。向量長度=數組長度,使用count

0

那麼,你可以使用數學API將數學推導寫入代碼中。例如在Java中有Math用於此目的。或者你可以編寫你自己的方法(函數),它們將能夠執行這些操作...讓我們看看發佈的鏈接中的ecuation。第一次提示:pi和qi差異絕對值的suma(p與指數i)。 pi和qi你可以將它們存儲在一個數組中。那麼對於絕對值,你可以編寫自己的函數,是能夠做到這一點的操作,例如(我用C/C++風格的語法):

int absoluteValue(int number){ 
    if (number < 0) return number = number * (-1); 
    else return number; 
} 

而對於SUMA過:它只是一個簡單的()週期。如果你有更難的數學運算,當然實現它們更困難。 您只需向PC逐步寫入如何執行操作指示。到底你是怎麼做的,當你計算一些東西的時候。

希望這是有幫助:)

+0

感謝清理,這很有幫助。 :) – Dreamslash

0

如果目標是爲了計算表達式(涉及的數學函數,操作,等等),則該過程通常是相當簡單的(然而,在代碼和計算機的步驟複雜化)。當方程的左邊是通過右邊的評估計算出來的時候,我們可以稱之爲顯式數學。

但在數學方程式的文章能有一個完全隱含意義和效用。例如,微分方程通常不會給程序員找到解決方案的明顯方法。這些任務需要程序員用數值分析的一些知識來補充文獻中的方程。