2
  1. 如何在 Haskell 中对复杂的复数值函数进行数值积分?
  2. 是否有任何现有的库?numeric-tools仅对实数起作用。

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

i = integrate f x a b precision

计算点上函数从a到的直线的积分。 , , ,都是或更好的类型。bfxixabComplex DoubleNum a => Complex a

请... :)

4

1 回答 1

3

你可以自己做这样的东西。假设你有一个realIntegratetype 的函数(Double -> Double) -> (Double,Double) -> Double,接受一个函数和一个包含上下限的元组,将结果返回到某个固定的精度。例如,您可以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)

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

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

于 2013-06-11T09:11:14.440 回答