我知道在复杂的平面上只有线积分,所以我感兴趣的界面是这样的:
i = integrate f x a b precision
计算点a
上函数b
的{{1}}到f
的直线上的积分。
x
,i
,x
,a
都是b
或更好的Complex Double
类型。
请......:)
答案 0 :(得分:3)
你可以自己制作这样的东西。假设你有一个realIntegrate
类型的函数(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)
所以我们通过线性插值将a
到b
的路径表示为从0到1的实际区间的函数,沿着该路径取f
的值,整合分别是实部和虚部(我不知道这是否可以给出数字上表现不佳的结果)并将它们重新组合成最终答案。
我没有测试过这段代码,因为我没有安装数字工具,但至少它没有测试: - )