APL/J 安利:三次方求和公式是什麼? (J)

我們來解決這個問題:

 1^3+2^3+dots+n^3= ?

這個的答案看起來顯然是個 4 次的多項式,於是我們試著代入 n=0dots4 分別算出結果,進行多項式插值。下面的互動的 log,你看爽不爽啊?

沒體現出優勢來?那你用你最喜歡的語言寫一下相同的功能,一起來比較一下優劣之處唄。

NB. 5 以下的自然數n i. 5n0 1 2 3 4nn NB. 5 以下自然數的三次方n ] cubes =. (i. 5) ^ 3n0 1 8 27 64nn NB. =. 表示定義變數n NB. ] 表示顯示結果(否則定義的變數默認不會輸出)nn NB. 我們定義了一個變數n cubesn0 1 8 27 64nn NB. 乘方表n ^/~ i. 3n1 0 0n1 1 1n1 2 4nn NB. 這樣看著更清楚n ^table~ i. 3n+-+-----+n|^|0 1 2|n+-+-----+n|0|1 0 0|n|1|1 1 1|n|2|1 2 4|n+-+-----+nn NB. 插曲:解線性方程n NB. 2x + 3y = 7n NB. 6x - 7y = 10nn NB. 矩陣n > 2 3 ; 6 _7n2 3n6 _7nn NB. 這裡的 _ 是負號的意思nn NB. 解這個方程n 7 10 %. (> 2 3; 6 _7)n2.46875 0.6875nn NB. 用分數表示的精確解 (兩邊參數使用 x: 來轉換為高精度有理數值)n (x:7 10) %. (x: > 2 3; 6 _7)n79r32 11r16nn NB. xry 表示 x/ynn NB. 5 以下自然數的三次方的前綴和n +/ (i. 5) ^ 3n0 1 9 36 100nn NB. 參考n +/ 1 2 5 _7 3 4n1 3 8 1 4 8nn NB. 5 以下乘方表n ^/~ i. 5n1 0 0 0 0n1 1 1 1 1n1 2 4 8 16n1 3 9 27 81n1 4 16 64 256n n NB. 解方程求多項式插值n ] res =. (+/ (i. 5) ^ 3) %. ^/~ i. 5n_1.00017e_13 3.5314e_12 0.25 0.5 0.25nn NB. 精確解n ] res =. (+/ (x:i. 5) ^ 3) %. ^/~ x:i. 5n0 0 1r4 1r2 1r4n n NB. 多項式求值n res p. 12n6084n n NB. 0^3 + 1^3 + ... + 12^3 = 6084n +/ (i. 13)^3n6084nn NB. 驗證得知結果正確n

結果是

 {1over4}n^2+{1over2}n^3+{1over4}n^4

推薦閱讀:

Haskell 實現相關的 reading list
學習haskell的過程中有哪些值得一做的練手項目?
函數式-21天入門教程
如何理解F#里的 Computation Expressions (Haskell 里的 Monads? )
愉悅的scheme之旅(2)--用callcc合成控制流

TAG:函数式编程 | 数组 | 数列推理 |