Существует ли функция/пакет в R, которая принимает функцию f и параметр k, а затем возвращает тэйлоровское приближение f степени k?
Тейлора в R
Ответ 1
Вы можете использовать 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
Ответ 2
Сравните приведенное выше символическое решение с численным приближением Тейлора:
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
Ответ 3
В качестве продолжения рассмотрим:
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"
Какой из них более точен, я оставлю читателю: -)
Ответ 4
Если вы запрашиваете приближение Тейлора на фоне распространения ошибки, вы можете попробовать "распространить" функцию моего пакета qpcR
, который оценивает векторы символьных градиентов вместе с ковариационной матрицей в виде g * V * t(g)
( известная матричная нотация для распространения ошибок), что эквивалентно разложению Тейлора первого порядка.
Cheers, Андрей