mak*_*aks 2 math scala stream series
我不知道是否有可能来定义使用Scala的无穷级数Stream的
我接下来试过了:
Stream.tabulate(Int.MaxValue)(n => func(n))
Run Code Online (Sandbox Code Playgroud)
func计算系列单个成员的函数在哪里(例如1 / n!用于计算e)
但它实际上并不正确.因为这个系列会有最多的Int.MaxValue成员.对于绝对收敛的系列来说,这可能就足够了.但是,如果系列有正面和负面成员(可能不会交替一个),那该怎么办呢?
PS我想以下一种方式使用这样的系列
val stream = Stream.tabulate(Int.MaxValue)(n => func(n))
val seriesSum =
(stream zip stream.tail).takeWhile{case(a, b) => abs(abs(a) - abs(b)) > Error}.map(_._1).sum
Run Code Online (Sandbox Code Playgroud)
其中Error例如为0.00001
我该怎么用而不是Stream.tabulate?
你可以很直接地做这种事情与组合Stream.iterate和scanLeft:
def factorial(n: BigInt): BigInt = (BigInt(1) to n).reduceLeft(_ * _)
def factorials = Stream.iterate(BigInt(1))(_ + 1).map(factorial)
def values = factorials.scanLeft(BigDecimal(0))(_ + 1 / BigDecimal(_))
Run Code Online (Sandbox Code Playgroud)
然后:
scala> values.take(10).foreach(println)
0
1
1.5
1.6666666666666666666666666666666667
1.70833333333333333333333333333333337
1.716666666666666666666666666666666703
1.718055555555555555555555555555555592
1.7182539682539682539682539682539682904
1.71827876984126984126984126984126987770
1.718281525573192239858906525573192276289
Run Code Online (Sandbox Code Playgroud)
正如所料.