数学序列进一步的元素
Mathematic sequence further elements
假设我有以下等式。我的目标是创建包含 return 下一个元素的序列。这是我的解决方案并且有效:
let rec factorial(n:float) =
match n with
|0.0 -> 1.0
|n -> n * factorial(n-1.0)
let seq1 = Seq.initInfinite( fun i -> factorial(float(i)) / sqrt(float(i)+1.0) ))
现在,类比地,我想根据等式创建包含 return 个元素的序列:
我有一些代码,但它是错误的,那么如何让它工作?
let seq2(x:float) = Seq.initInfinite(fun a -> let i = float(a)
(1.0/factorial(0.0)) + System.Math.Pow(x,i)/factorial(i) )
你不能跳过等式的 (1.0/factorial(0.0)) 部分吗(或者我误解了这个问题)。
编辑:即
let seq2(x:float) =
Seq.initInfinite(fun a ->
let i = float(a) in
System.Math.Pow(x,i)/factorial(i))
编辑:要截断一个序列,您可以使用 'take' 并求和,您可以使用 'sum'。如
let seq2sum nbelems =
seq2 >> Seq.take nbelems >> Seq.sum
然后你得到 seq2sum 12 3.0
大约等于 20 :-)
函数式语言的伟大之处在于,您可以让您的解决方案尽可能接近原始定义的表达式。
您可以避免对大多数函数进行显式类型声明:
let rec factorial = function
| 0 -> 1
| n -> n * (factorial (n-1))
let e x n =
seq { 0 .. n }
|> Seq.map(fun i -> x ** (float i) / float (factorial i))
|> Seq.sum
在无限级数中,您必须在求和之前取前 n 个条目,因为无限级数永远不会完成计算:
let e' x n =
Seq.initInfinite(fun i -> x ** (float i) / float (factorial i))
|> Seq.take n
|> Seq.sum
e 1.0 10 //2.718281801
e' 1.0 10 //2.718281801
假设我有以下等式
let rec factorial(n:float) =
match n with
|0.0 -> 1.0
|n -> n * factorial(n-1.0)
let seq1 = Seq.initInfinite( fun i -> factorial(float(i)) / sqrt(float(i)+1.0) ))
现在,类比地,我想根据等式创建包含 return 个元素的序列:
我有一些代码,但它是错误的,那么如何让它工作?
let seq2(x:float) = Seq.initInfinite(fun a -> let i = float(a)
(1.0/factorial(0.0)) + System.Math.Pow(x,i)/factorial(i) )
你不能跳过等式的 (1.0/factorial(0.0)) 部分吗(或者我误解了这个问题)。
编辑:即
let seq2(x:float) =
Seq.initInfinite(fun a ->
let i = float(a) in
System.Math.Pow(x,i)/factorial(i))
编辑:要截断一个序列,您可以使用 'take' 并求和,您可以使用 'sum'。如
let seq2sum nbelems =
seq2 >> Seq.take nbelems >> Seq.sum
然后你得到 seq2sum 12 3.0
大约等于 20 :-)
函数式语言的伟大之处在于,您可以让您的解决方案尽可能接近原始定义的表达式。
您可以避免对大多数函数进行显式类型声明:
let rec factorial = function
| 0 -> 1
| n -> n * (factorial (n-1))
let e x n =
seq { 0 .. n }
|> Seq.map(fun i -> x ** (float i) / float (factorial i))
|> Seq.sum
在无限级数中,您必须在求和之前取前 n 个条目,因为无限级数永远不会完成计算:
let e' x n =
Seq.initInfinite(fun i -> x ** (float i) / float (factorial i))
|> Seq.take n
|> Seq.sum
e 1.0 10 //2.718281801
e' 1.0 10 //2.718281801