【问题标题】:maclaurin series in JJ中的麦克劳林系列
【发布时间】:2015-05-31 02:11:27
【问题描述】:

我正在尝试在 J 中实现 sine(x) 的级数展开(我不担心准确性,而是更好地表达级数的问题)。

到目前为止,我有以下显式版本,它使用 50 个项计算 sine(pi):

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

不过好像有点笨拙,有没有“更好”的版本(可能是默认的?)?

【问题讨论】:

  • 该系列的两个术语之间的商是(-x*x)/((2*k)*(2*k+1))。您能否将其实现为单行,即从term=1k=1sum=0 开始,循环:将term 添加到sum,将term 与下一个商相乘,增加k 1,结束循环(k=50),返回x*sum
  • 是的,但是你有一个明确的 do-loop 似乎不是数组处理......

标签: math j taylor-series


【解决方案1】:

如果您的 y 是 i.,您需要一个奇数列表:l =: >:+:i. y (>:@+:@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),即train (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)

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

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

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

【讨论】:

  • 这正是我所希望的。一个默契的版本,一步一步的推导。作为初学者,简单地提出解决方案通常不是很有价值。谢谢。
【解决方案2】:
   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

第一个和第二个几乎是默认翻译,最后一个使用钩子和叉子,除非你习惯它们,否则可能有点多。

【讨论】:

    猜你喜欢
    • 2019-05-23
    • 2014-07-12
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    相关资源
    最近更新 更多