10
votes

Comment puis-je évaluer la dérivée d'une fonction SPLINE dans R?

r peut générer une fonction SPLINE à l'aide de SPLINEFUN () dans la bibliothèque de splines. Cependant, j'ai besoin d'évaluer cette fonction à ses premier et deuxième dérivés. Y a-t-il un moyen de faire cela?

Par exemple xxx

Comment puis-je évaluer f '(x) pour un vecteur de x?


0 commentaires

3 Réponses :


17
votes

Il est très facile de faire car la capacité d'évaluer la fonction sur ses dérivés est intégrée à la fonction! xxx

merci r-core!


1 commentaires

Ce n'est pas un opérateur "==", mais "=".



2
votes

Vous pouvez également être intéressé par la fonction TKSPLINE dans le package SecourchDemos qui tracera la fonction Spline avec ses dérivés.


0 commentaires

2
votes

L'utilisation de l'argument Deriv = SPLINEfun est sensible et il convient d'ajouter que les deuxième et troisième dérivés sont censés être disponibles, mais si vous travaillez à travers les exemples, vous réaliserez que les approximations linéaires sont déchirées et discontinues. À des degrés supérieurs.

Dans la situation dans laquelle vous avez une expression analytique, certaines dispositions ont certes limitées pour la différenciation algorithmique. Voir la page Aide (DERIV) pour plus de détails. P> xxx pré>

puis construit "à la main" une deuxième fonction avec ce résultat. Ou vous pouvez utiliser l'exemple DD fourni sur la page Aide (DERIV) pour automatiser le processus un peu plus: P>

 DD <- function(expr,name, order = 1) {
    if(order < 1) stop("'order' must be >= 1")
    if(order == 1) D(expr,name)
    else DD(D(expr, name), name, order - 1)
 }
 DD(expression(sin(pi/x)), "x", 2)
-(sin(pi/x) * (pi/x^2) * (pi/x^2) - cos(pi/x) * (pi * (2 * x)/(x^2)^2))
 DD(expression(sin(pi/x)), "x")
-(cos(pi/x) * (pi/x^2))
funD<- function(x){}
body(funD) <- DD(expression(sin(pi/x)), "x")
funD
   #function (x) 
     #-(cos(pi/x) * (pi/x^2))
funD(2)
#   [1] -4.809177e-17  as it should be at a maximum
funDD <- function(x){}
body(funDD) <- DD(expression(sin(pi/x)), "x", 2)
funDD(2)
#  [1] -0.6168503   as it should be at a maximum.


2 commentaires

+1 merci pour la perspicacité; Cependant, j'utilise une spline pour se rapprocher d'un modèle de calcul intensité de calcul.


J'avais peur de ça. Je conseillerais de courir à travers les exemples de la page SPLINEFUN pour avoir une meilleure idée de la façon dont ils se comportent avec une commande supérieure (de 1) arguments à dériver =. Cela a eu du sens après avoir passé du temps à comploter, mais au début, les résultats semblaient apparemment jarring.