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

我们来解决这个问题:

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

这个的答案看起来显然是个 4 次的多项式,于是我们试着代入 n=0\dots4 分别算出结果,进行多项式插值。下面的互动的 log,你看爽不爽啊?

没体现出优势来?那你用你最喜欢的语言写一下相同的功能,一起来比较一下优劣之处呗。

   NB. 5 以下的自然数
   i. 5
0 1 2 3 4

   NB. 5 以下自然数的三次方
   ] cubes =. (i. 5) ^ 3
0 1 8 27 64

   NB. =. 表示定义变量
   NB. ] 表示显示结果(否则定义的变量默认不会输出)

   NB. 我们定义了一个变量
   cubes
0 1 8 27 64

   NB. 乘方表
   ^/~ i. 3
1 0 0
1 1 1
1 2 4

   NB. 这样看着更清楚
   ^table~ i. 3
+-+-----+
|^|0 1 2|
+-+-----+
|0|1 0 0|
|1|1 1 1|
|2|1 2 4|
+-+-----+

   NB. 插曲:解线性方程
   NB. 2x + 3y = 7
   NB. 6x - 7y = 10

   NB. 矩阵
   > 2 3 ; 6 _7
2  3
6 _7

   NB. 这里的 _ 是负号的意思

   NB. 解这个方程
   7 10 %. (> 2 3; 6 _7)
2.46875 0.6875

   NB. 用分数表示的精确解 (两边参数使用 x: 来转换为高精度有理数值)
   (x:7 10) %. (x: > 2 3; 6 _7)
79r32 11r16

   NB. xry 表示 x/y

   NB. 5 以下自然数的三次方的前缀和
   +/\ (i. 5) ^ 3
0 1 9 36 100

   NB. 参考
   +/\ 1 2 5 _7 3 4
1 3 8 1 4 8

   NB. 5 以下乘方表
   ^/~ i. 5
1 0  0  0   0
1 1  1  1   1
1 2  4  8  16
1 3  9 27  81
1 4 16 64 256
   
   NB. 解方程求多项式插值
   ] res =. (+/\ (i. 5) ^ 3) %. ^/~ i. 5
_1.00017e_13 3.5314e_12 0.25 0.5 0.25

   NB. 精确解
   ] res =. (+/\ (x:i. 5) ^ 3) %. ^/~ x:i. 5
0 0 1r4 1r2 1r4
 
   NB. 多项式求值
   res p. 12
6084
 
   NB. 0^3 + 1^3 + ... + 12^3 = 6084
   +/ (i. 13)^3
6084

   NB. 验证得知结果正确

结果是

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

文章被以下专栏收录