通过 F# 的泰勒级数
Taylor series via F#
我正在尝试用 F# 编写泰勒级数。
看看我的代码
let rec iter a b f i =
if a > b then i;
else f a (iter (a+1) b f i)
let sum a b = iter a b (+) 0 // from 0
// e^x = 1 + x + (x^2)/2 + ... (x^n)/n! + ...
let fact n = iter 1 n (*) 1 // factorial
let pow x n = iter 1 n (fun n acc -> acc * x) 1
let exp x =
iter 0 x
(fun n acc ->
acc + (pow x n) / float (fact n)) 0
在最后一行中,我尝试将 int fact n
强制转换为浮动,但似乎我错了,因为这段代码不可编译:(
我在做正确的算法吗?
我可以调用我的代码函数优先吗?
代码无法编译,因为:
- 您正试图将一个整数
pow x n
除以一个浮点数。除法必须具有相同类型的操作数。
- 您指定的终端案例类型有误。文字
0
是整数。如果要浮零,请使用 0.0
或缩写 0.
试试这个:
let exp x =
iter 0 x
(fun n acc ->
acc + float (pow x n) / float (fact n)) 0.
P.S。以后,请提供您收到的 and/or 意外结果的确切错误消息。简单地说 "doesn't work" 并不能很好地描述问题。
我正在尝试用 F# 编写泰勒级数。 看看我的代码
let rec iter a b f i =
if a > b then i;
else f a (iter (a+1) b f i)
let sum a b = iter a b (+) 0 // from 0
// e^x = 1 + x + (x^2)/2 + ... (x^n)/n! + ...
let fact n = iter 1 n (*) 1 // factorial
let pow x n = iter 1 n (fun n acc -> acc * x) 1
let exp x =
iter 0 x
(fun n acc ->
acc + (pow x n) / float (fact n)) 0
在最后一行中,我尝试将 int fact n
强制转换为浮动,但似乎我错了,因为这段代码不可编译:(
我在做正确的算法吗?
我可以调用我的代码函数优先吗?
代码无法编译,因为:
- 您正试图将一个整数
pow x n
除以一个浮点数。除法必须具有相同类型的操作数。 - 您指定的终端案例类型有误。文字
0
是整数。如果要浮零,请使用0.0
或缩写0.
试试这个:
let exp x =
iter 0 x
(fun n acc ->
acc + float (pow x n) / float (fact n)) 0.
P.S。以后,请提供您收到的 and/or 意外结果的确切错误消息。简单地说 "doesn't work" 并不能很好地描述问题。