- 如何在 Haskell 中对复杂的复数值函数进行数值积分?
- 是否有任何现有的库?numeric-tools仅对实数起作用。
我知道在复平面上只有线积分,所以我感兴趣的界面是这样的:
i = integrate f x a b precision
计算点上函数从a
到的直线的积分。
, , ,都是或更好的类型。b
f
x
i
x
a
b
Complex Double
Num a => Complex a
请... :)
我知道在复平面上只有线积分,所以我感兴趣的界面是这样的:
i = integrate f x a b precision
计算点上函数从a
到的直线的积分。
, , ,都是或更好的类型。b
f
x
i
x
a
b
Complex Double
Num a => Complex a
请... :)
你可以自己做这样的东西。假设你有一个realIntegrate
type 的函数(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 a
to表示b
为从 0 到 1 的实数区间上的函数,f
沿该路径取 的值,分别积分实部和虚部(我不知道这是否可以给出数值上的不良行为结果)并将它们重新组合成最终答案。
我没有测试这段代码,因为我没有安装数字工具,但至少它可以进行类型检查:-)