【问题标题】:Are there any Haskell libraries for integrating complex functions?是否有任何用于集成复杂功能的 Haskell 库?
【发布时间】:2013-06-11 07:29:26
【问题描述】:
  1. 如何在 Haskell 中对复数、复值函数进行数值积分?
  2. 是否有任何现有的库? numeric-tools 只对实数起作用。

我知道复平面上只有线积分,所以我感兴趣的界面是这样的:

i = integrate f x a b precision

计算函数f在点x上从ab的直线积分。 i,x,a,b都是Complex Double或者更好的Num a => Complex a类型。

请... :)

【问题讨论】:

    标签: haskell numerical-methods complex-numbers integral


    【解决方案1】:

    你可以自己制作这样的东西。假设你有一个(Double -> Double) -> (Double,Double) -> Double 类型的函数realIntegrate,接受一个函数和一个包含上下限的元组,将结果返回到某个固定的精度。例如,您可以使用数字工具定义 realIntegrate f (lo,hi) = quadRomberg defQuad (lo,hi) f

    然后我们可以使您想要的功能如下 - 我现在忽略精度(我不明白您的 x 参数是什么!):

    integrate :: (Complex Double -> Complex Double) -> Complex Double -> Complex Double -> Complex Double
    integrate f a b = r :+ i where
        r = realIntegrate realF (0,1)
        i = realIntegrate imagF (0,1)
        realF t = realPart (f (interpolate t)) -- or realF = realPart . f . interpolate
        imagF t = imagPart (f (interpolate t))
        interpolate t = a + (t :+ 0) * (b - a)
    

    所以我们将ab的路径通过线性插值表示为从0到1的实数区间上的函数,沿该路径取f的值,分别积分实部和虚部(不过,我不知道这是否会给出数值上的不良行为结果)并将它们重新组合成最终答案。

    我没有测试此代码,因为我没有安装数字工具,但至少它可以进行类型检查 :-)

    【讨论】:

    • 您仍然需要将结果与b - a 相乘,但它应该可以正常工作。
    • @leftaroundabout:好点子!自从我上次更改不是 alpha 重命名的变量以来已经有好几年了......
    • 哦,哇。您的回答者指出了我理解“集成”含义的关键区别。 :( 我对 AB 线上的部分总和的限制并不真正感兴趣,而是在给定 f(x) 的情况下对 F(x) 的值感兴趣(x 当然是复数)。因此 x 中的参数我提议的函数声明。非常感谢您的解决方案!不过,我现在有点困惑,是应该打开另一个问题还是编辑这个问题...
    • 好的,我会接受您的出色回答并提出另一个问题。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多