构建复合计算

时间:2014-03-03 22:01:36

标签: haskell monads scientific-computing

我想对一组数据做一些不同的计算。这些计算有一些常见的子计算,最终会被重新评估,所以我想要做的是建立一个“复合计算”,它可以同时完成所有事情并共享数据。我觉得这有一个monad,但我不知道它的名字。

我真的对这个抽象方面很感兴趣,但是实际情况不那么模糊如下:我有一个2D网格,我正在进行模拟,因此我正在计算局部值(衍生物)等)使用模板然后将它们组合起来以及时向前迈进模拟。这是一个简单的例子:

import Data.Array.Accelerate
type Local  = Stencil3x3 Double -> Exp Double

convect :: Local
convect s@((_,t,_),(l,c,r),(_,b,_)) =
    c+c0*(dx s +dy s)
    where c0 = 1e-2

dx :: Local
dx ((_,t,_),(l,c,r),(_,b,_)) = 0.5*(l-r)

(但我可以很容易地不在这里使用Accelerate和模板。)

我知道我可以将这一切都归结为一个功能,但这不会非常优雅或者可以恢复或者具有可靠性。

我能告诉convect是否有一个很好的方式,“我会想要这些价值观,请立即将它们全部拿出来”?

1 个答案:

答案 0 :(得分:1)

听起来像是(2D)array comonad的应用程序!