Символьное дифференцирование менее подвержено ошибкам, чем ручное.
Для низких порядков я не думаю, что символическое дифференцирование потребует много компьютерного времени, но вы можете легко рассчитать свою конкретную ситуацию, чтобы определить, что она использует proc.time, system.time или rbenchmark пакет. См. также эти примеры.
Возможно, вы захотите попробовать как символическую, так и ручную дифференциацию в качестве проверки.
Что касается deriv R (и связанных функций например D
) по сравнению с пакетом Ryacas, последний имеет возможность повторять дифференцирование, не требуя от пользователя итерации сами (третий аргумент deriv
указывает порядок), и у него есть функция Simplify
, для которой нет аналога в R, хотя Ryacas следует тщательно проверять, так как yacas иногда могут немного глючить.
Вот пример:
> library(Ryacas)
> x <- Sym("x")
> y <- (x^2+x)^2
> dy <- deriv(y, x, 2) # 2nd deriv
> dy
expression(2 * (2 * x + 1)^2 + 4 * (x^2 + x))
> Simplify(dy)
expression(2 * (6 * x^2 + 6 * x + 1))
РЕДАКТИРОВАТЬ: добавлено в пример:
> Eval(dy, list(x = 3))
[1] 146
> Eval(Simplify(dy), list(x = 3))
[1] 146
>
> f <- function(x) {}
> body(f) <- yacas(Simplify(dy))[[1]]
> f
function (x)
2 * (6 * x^2 + 6 * x + 1)
> f(3)
[1] 146
>
> # double check
> w <- 3
> eval(D( D(expression((w^2+w)^2), "w"), "w"))
[1] 146
Также попробуйте demo("Ryacas-Function")
.
РЕДАКТИРОВАТЬ 2: исправлена ошибка и добавлено больше примеров.
person
Community
schedule
08.01.2012
f
? - person Carl Witthoft   schedule 08.01.2012D()
перечислено несколько функций с одной переменной, которые он распознает. Узнает ли Рьякас еще кучу? - person Josh O'Brien   schedule 08.01.2012