J中的maclaurin系列

时间:2015-03-26 21:15:43

标签: math j taylor-series

我正在尝试在J中实现sine(x)的系列扩展(我不担心准确性,但更多的是很好地表达系列的问题)。

到目前为止,我有以下显式版本,使用50个术语计算正弦(pi):

3.14(4:'+ /((_ 1 ^ y)*(x ^(1 + 2 * y))%!1 + 2 * y)')i.50

但它似乎有点笨重,是否有一个“更好”的版本(也许是默认?)?

2 个答案:

答案 0 :(得分:3)

如果您的y为l =: >:+:i. y,您需要幂和因子的奇数列表:>:@+:@i.>:@+:)或i.

然后,你想要幂(x ^ l)除以阶乘(!l)。一种方法是将其视为分叉(x f y) h (x g y) - > (x ^ l) % (x (]!) l)(^ % (]!))

最后一步是将此系列乘以系列1, _1, 1, ..._1 ^ y_1&^

因此,最终表单为(_1 ^ y) * (x (^ * (]!)) (>:@+:@i.) y),即列车 (h y) j (x f (g y))(h y) j (x (f g) y)(x (]h) y) j (x (f g) y)(]h) j (f g):< / p>

ms =: (] _1&^)  *   ((^ % (]!)) (>:@+:))
+/ 3.14 ms i.50 
0.00159265

f =: +/@(ms i.)
3.14 f 50
0.00159265

另一方面,您可以T.使用the taylor approximation

答案 1 :(得分:0)

   3.14 (4 :'+/((_1^y) * (x^(1+2*y)) % !1+2*y)') i.50
0.00159265

默契版本可能如下所示:

   3.14 +/@:((_1 ^ ]) * ([ ^ 1 + +:@]) % !@(1 + +:@])) i.50
0.00159265

或者这个:

   3.14 +/@:((_1 ^ ]) * ([ ^ >:@+:@]) % !@>:@+:@]) i.50
0.00159265

甚至是这样:

   3.14 +/@:((_1 ^ ]) * (( ^  % !@])(>:@+:@]))) i.50
0.00159265

第一个和第二个是非常隐性的翻译,最后一个使用钩子和叉子,除非你习惯了它们,否则可能会有点多。