Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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
Math haskell中的泰勒级数_Math_Haskell_Recursion_Taylor Series - Fatal编程技术网

Math haskell中的泰勒级数

Math haskell中的泰勒级数,math,haskell,recursion,taylor-series,Math,Haskell,Recursion,Taylor Series,如何编写泰勒级数递归数据,如下所示: fib = 0 : scanl (+) 1 fib 例如,我希望promt是这样的: fac n = product[1..n] sin' x = x : x^3/fac(3) : x^5/fac(5) : ... sum $ take 10 (sin' (pi/6)) 得到正弦泰勒级数的10个第一元素的和。这不是sin的泰勒级数!但这里有个线索 products = scanl (*) 1 [1..] powers x = map (x^) [0..]

如何编写泰勒级数递归数据,如下所示:

fib = 0 : scanl (+) 1 fib
例如,我希望promt是这样的:

fac n = product[1..n]
sin' x = x : x^3/fac(3) : x^5/fac(5) : ...
sum $ take 10 (sin' (pi/6))

得到正弦泰勒级数的10个第一元素的和。

这不是sin的泰勒级数!但这里有个线索

products = scanl (*) 1 [1..]
powers x = map (x^) [0..]
exp' x = zipWith (/) (powers x) products

*Main> sum (take 10 (exp' 1))
2.7182815255731922

一种常见的方法是使用一个列表来表示幂级数的系数,并编写另一个函数来计算特定值下的幂级数

例如,幂级数1/(1-x)^2=1+2x+3x^2+。。。将由列表
[1,2,3,…]
表示

要对其进行评估,我们需要一个函数:

eval :: [Float] -> Float -> Float
基本情况很简单:

eval [] x = 0
归纳情况可以递归定义:

eval (a:as) x = a + x*...   -- left as an exercise
当然,此
eval
不会在无限列表上终止,因此您必须确保只为其提供有限列表:

sin' = [ 1, 0, - 1 / fac 3, 0, 1 / fac 5, 0, ... ]
eval (take 10 sin') (pi/6)

现在您只需为
sin'
生成系数。请注意,在这种情况下,
10
指的是要求和的
x
的最高幂,而不是求和中非零项的数目。

泰勒级数对每个x^n都有一个系数。你能写出一个从n到x^n的相应系数的函数吗?你是对的,我忘记了序列中元素的符号。系数的函数为:(-1)^(n-1),因此,级数中每个元素的正弦函数为:(-1)^(n-1)*x^n/n!,其中n=[1..infinity]我已经编写了以下代码:但是当前有错误。我如何运行这段代码呢?这里使用scan和zipWith特别令人愉快。这是一个非常好的习惯用法。
powers x
更有效的实现是
iterate(x*)1
@LouisWasserman,甚至更好,
产品
不需要:
exp'x=scanl(*)1$map(x/)[1..
(或者通过向scanl传递不同的函数来消除
map
)您还可以定义
Num A=>[a] 
作为
Num
类型类的一个实例,以表示多项式加法和乘法的方式,这样您就可以像
sin'
cos'
那样对泰勒级数进行加法和乘法(同样是有限精度的)。