R中的泰勒近似

时间:2013-02-08 02:33:13

标签: r

R 中是否有一个函数/包,它取一个函数f和一个参数k,然后返回一个阶数为k的泰勒逼近?

4 个答案:

答案 0 :(得分:16)

您可以使用Ryacas使用yacas计算机代数系统(您还需要安装)

使用小插图中的示例

 library(Ryacas)
 # run   yacasInstall() if prompted to install yacas
 #
 yacas("texp := Taylor(x,0,3) Exp(x)")
 ## expression(x + x^2/2 + x^3/6 + 1)
 # or

现在,如果您想将其转换为可以赋予x

值的函数
myTaylor <- function(f, k, var,...){
  .call <- sprintf('texp := Taylor( %s, 0, %s) %s', var,k,f)
  result <- yacas(.call)
  foo <- function(..., print = FALSE){
    if(print){print(result)}
    Eval(result, list(...))}
  return(foo)
}
# create the function
foo <- myTaylor('Exp(x)', 3, 'x')
foo(x=1:5)
## [1]  2.666667  6.333333 13.000000 23.666667 39.333333
foo(x=1:5, print = TRUE)
## expression(x + x^2/2 + x^3/6 + 1)
## [1]  2.666667  6.333333 13.000000 23.666667 39.333333

答案 1 :(得分:5)

将上述符号解与数值泰勒近似进行比较:

library(pracma)

p <- taylor(f = exp, x0 = 0, n = 4)             # Numerical coefficients 
# 0.1666667 0.5000000 1.0000000 1.0000000       # x^3/6 + x^2/2 + x + 1

polyval(p, 1:5)                                 # Evaluate the polynomial
# 2.66667  6.33333 13.00000 23.66667 39.33334   # exp(x) at x = 1:5

答案 2 :(得分:1)

作为后续,请考虑:

 foo <- myTaylor('Exp(x)', 3, 'x')
sprintf('%2.15f',foo(x=1:5))
[1] "2.666666666666667"  "6.333333333333333"  "13.000000000000000"
[4] "23.666666666666664" "39.333333333333329"

p <- taylor(f = exp, x0 = 0, n = 3)
sprintf('%2.15f',polyval(p,1:5))
[1] "2.666666721845557"  "6.333333789579300"  "13.000001556539996"
[4] "23.666670376066413" "39.333340601497312"

其中哪一个更准确,我会留给读者: - )

答案 3 :(得分:1)

如果您要求在错误传播的背景中进行泰勒逼近,您可以尝试我的qpcR包的“传播”功能,该功能会以{{{{}}的形式评估符号梯度向量和协方差矩阵。 1}}(着名的误差传播矩阵表示法),相当于一阶泰勒展开式。

干杯, 安德烈