Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果一个级数使用Haskell收敛,是否可以进行高精度计算?_Haskell_Math_Functional Programming - Fatal编程技术网

如果一个级数使用Haskell收敛,是否可以进行高精度计算?

如果一个级数使用Haskell收敛,是否可以进行高精度计算?,haskell,math,functional-programming,Haskell,Math,Functional Programming,我正在尝试在Haskell中开发一个自定义数学库,用于为项目编码表达式。我想知道是否有可能(以高精度)确定一个从n到无穷大的数学公式是收敛还是发散。我的库中有一个sigma sum函数,我最初认为我可以用它来确定一个级数是否收敛,方法是找到sigma sum与n的差值,比如1000,以及相同n的和与100000的差值。然而,虽然我一开始认为这可能有效,但我意识到这是行不通的,因为任何常数倍的收敛级数也是收敛的,最终会增加我用来确定级数是否收敛的和的差 这就是我所拥有的: isConverging

我正在尝试在Haskell中开发一个自定义数学库,用于为项目编码表达式。我想知道是否有可能(以高精度)确定一个从n到无穷大的数学公式是收敛还是发散。我的库中有一个sigma sum函数,我最初认为我可以用它来确定一个级数是否收敛,方法是找到sigma sum与n的差值,比如1000,以及相同n的和与100000的差值。然而,虽然我一开始认为这可能有效,但我意识到这是行不通的,因为任何常数倍的收敛级数也是收敛的,最终会增加我用来确定级数是否收敛的和的差

这就是我所拥有的:

isConverging :: String -> a -> Expr a -> Bool
isConverging x a expr = if abs((eval (Map.fromList [(x, a)]) $ sigma x a (1000) expr) - (eval (Map.fromList [(x, a)]) $ sigma x a (100000) expr)) <= 1.0e-3 then True else False
isConverging::String->a->Expr a->Bool

Isconvering x a expr=如果abs((评估(映射自列表[(x,a)])$sigma x a(1000)expr)-(评估(映射自列表[(x,a)])$sigma x a(100000)expr))较小,切题说明:
如果foo那么True或者False总是多余的——这与
foo
是一样的。你的问题提醒了我:我想这在很大程度上取决于你的表达语言有多复杂。如果你的表达式都是线性的,那就很容易了(常数0是收敛的,其他的都是收敛的);而如果你的表达式是图灵完备的,它显然是不可判定的。(可能任何复杂到使用起来很有趣的表达式语言都会让这个问题无法确定。)你不能使用任何基于delta的系统来检测收敛。众所周知,元素之间不收敛,元素之间的增量以0为极限。