Явна формула срещу символни производни в R

Бих искал да оценя производни от по-висок порядък на някаква функция f в R. Имам две възможности.

  1. Или определям общ израз за f(k), k-то производно на f (което аз може да направи в моя конкретен случай), след което го оценявам;
  2. Или се възползвам от капацитета на R за извършване на символна производна (функция D()).

Какви са предимствата на 1 пред 2? Да кажем, че f(k) не е рекурсивна формула. Ами ако f(k) е рекурсивен?

Всеки намек ще бъде оценен.


person Marco    schedule 08.01.2012    source източник
comment
Какво се опитваш да направиш? Въпросите ви са неясни. Да, Ryacas и други алгебрични компютърни езици могат да изчисляват аналитично (не символни производни (не производни), и да, можете да накарате R да изчислява стойността на различни функции, които представляват производни. Но защо и за какъв набор от функции f?   -  person Carl Witthoft    schedule 08.01.2012
comment
Говоря за символни производни в R (опитайте помощ (D)). Защо би било твърде дълго и неподходящо за обяснение. За какъв набор от функции f... добре, да кажем всяка функция, за която производните могат да бъдат изчислени... Бих искал да знам какви предимства бихте посочили, например по отношение на изчислително време, памет, скорост,. ..   -  person Marco    schedule 08.01.2012
comment
@G. Grothendieck: Благодаря ви много за вашите коментари   -  person Marco    schedule 08.01.2012
comment
@G.Grothendieck -- Благодаря, че се включихте. Бихте ли обмислили да направите коментарите си отговор и/или да споменете дали има някакво друго предимство на Ryacas пред D() w.r.t. символична диференциация? Помощната страница за D() изброява редица функции с единична променлива, които той разпознава. Ryacas разпознава ли куп повече?   -  person Josh O'Brien    schedule 08.01.2012
comment
добре, изтрих коментарите си и ги прехвърлих към отговор.   -  person G. Grothendieck    schedule 09.01.2012


Отговори (1)


Символното диференциране е по-малко податливо на грешки, отколкото правенето му на ръка.

За ниски поръчки не бих си помислил, че символното диференциране ще отнеме много компютърно време, но можете лесно да определите времето на вашата конкретна ситуация, за да определите какво използва proc.time, system.time или rbenchmark пакет. Вижте също тези примери.

Може да искате да опитате както символично, така и разграничаване на ръцете като чек.

По отношение на R deriv (и свързани функции като 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