【问题标题】:what is a good tacit form of sum(1/(1+x)^y) in JJ中sum(1/(1+x)^y)的一个好的默认形式是什么
【发布时间】:2013-02-08 05:46:59
【问题描述】:

作为初学者练习,我尝试使用 +/%(1 + 0.03)^ >:i.30 计算 J 中的以下总和,sum(1/(1+0.03)^n for n = 1 to 30。我怎样才能把它写成一个简单的默认形式?我尝试的所有方法都比上面的显式形式(如>:@[ (+/&:%)@:^ >:&i.@])丑得多

【问题讨论】:

  • 默认形式在某些计算中比其他形式更流畅。由于需要在公式中不规则地应用值,因此将它们传递到这些点的开销变得很繁重。这个事实在博客文章 evincarofautumn.blogspot.com/2012/02/… 中讨论(在非 J 上下文中),在标题为“黑暗面”的部分下。在手头的公式中,我认为这两个参数本质上并不笨拙,而是通过 Tikkanz 演示的钩子很好地处理。

标签: j tacit-programming


【解决方案1】:

你可以开始

+/@:%@((1 + 0.03) ^ >:@i.) 30

您可以使用 fork 将 0.03 设为 left 参数,但使用 hook 会更简洁

(1 + 0.03) +/@:%@([ ^ >:@i.@]) 30   NB. use fork
(1 + 0.03) +/@:%@(^ >:@i.) 30       NB. use hook

^ 的左右参数执行相同的操作(增量)。这暗示& (Compose) 可能有用。

0.03 +/@:%@(^&>: i.) 30         NB. apply increment to both left & right arg

【讨论】:

  • 我喜欢你如何将增量识别为双方共同的东西,以及你对钩子的使用。在这种情况下我更喜欢 Cap,所以我现在喜欢的措辞是 formula=: [: +/ [: % ( ^&>: i.)
【解决方案2】:

当我想要一个默认功能时,我经常让13 : 帮我搞定。在这种情况下,有一些变化:

   13 : '+/ %((1+0.03)^1+i.y)'
[: +/ [: % 1.03 ^ 1 + i.

   13 : '+/ %((1+0.03)^>:i.y)'
[: +/ [: % 1.03 ^ [: >: i.

并使用1+0.03 或任何作为左参数:

   13 : '+/ %(x^1+i.y)'
[: +/ [: % [ ^ 1 + [: i. ]

   13 : '+/ %(x^>:i.y)'
[: +/ [: % [ ^ [: >: [: i. ]

虽然有太多的大写字母 ([:) 不能称之为丑陋,但这是一个开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2022-01-25
    相关资源
    最近更新 更多