【问题标题】:Taylor series via F#泰勒级数通过 F#
【发布时间】:2017-08-21 23:45:33
【问题描述】:

我正在尝试用 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 转换为浮动,但似乎我错了,因为此代码不可编译:( 我在做正确的算法吗?

我可以调用我的代码功能优先吗?

【问题讨论】:

  • 当您问“为什么这段代码不起作用?”时,让我再说一下 Fyodor 关于提供 exact 错误消息的评论。或类似的问题。它消除了编写答案时的大量猜测,并确保您更有可能获得问题的好答案,因为更多的人无需猜测就能猜出答案。
  • @rmunn 感谢您的评论!下次我会提到确切的错误信息,我的错。

标签: f# functional-programming taylor-series


【解决方案1】:

代码无法编译,因为:

  • 您正试图将整数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.

附:将来,请提供您收到的确切错误消息和/或意外结果。简单地说“不起作用”并不能很好地描述问题。

【讨论】:

  • 你太棒了!出于某种原因,我认为您的表达式中只需要一个浮点元素,而 F# 将使结果浮动。现在我的问题已经解决了,我可以使用我的代码了! TY
  • “某种原因”可能是您过去使用类 C 语言的经验,其中自动类型扩展是常态。
  • 如果我的回答对您有所帮助,请花点时间单击左侧的灰色复选标记将其标记为“已接受”。
猜你喜欢
  • 2014-04-03
  • 1970-01-01
  • 2011-11-04
  • 2017-12-02
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
相关资源
最近更新 更多