2017-05-27 4 views
2

Ich bin brandneue Codierung und R, ich versuche, mich selbst zu unterrichten, aber ich habe ein bisschen zu kämpfen.Derivate und Ausdrücke in R benutzerdefinierte Funktion

Ich versuche eine einfache Kalkül-Funktion zu erstellen, die den del-Operator ∇ = auf einen Skalar wirken lässt. Ich kann die Derivate manuell berechnen:

Hier ist was ich bisher habe, es braucht offensichtlich ein bisschen mehr Input. Kann mir jemand helfen, wäre es sehr zu schätzen :)

> grad <- function(scal) { 
+ c(D(expression(scal),'x'),D(expression(scal),'y'), 
    D(expression(scal),'z')) 
+ } 

> grad(x*y*z) 
[1] 0 0 0 
+0

vielleicht ist 'deriv' besser:' deriv (~ x * y * z, c ('x', 'y', 'z')) berechnet alle partiellen Derivate – user2957945

Antwort

1

lassen Sie uns dies versuchen:

grad <- function(scal){ 
    scal <- substitute(scal) 
    sapply(c('x', 'y', 'z'), function(v) D(scal, v)) 
} 

# > grad(x*y*z) 
# $x 
# y * z 
# 
# $y 
# x * z 
# 
# $z 
# x * y 

Hinweis: Wenn wir durch lapply ersetzen, wird die Ausgabe genau die in Ihrer Frage sein. Aber ich denke mit names sind die Ergebnisse informativer.

+0

Das ist ausgezeichnet, funktioniert perfekt! – nkwm

0

Sie auf grad einen Ausdruck passieren sollten:

grad <- function(scal) { 
    c(D(scal,'x'), D(scal,'y'), D(scal,'z')) 
} 
grad(expression(x*y*z)) 

Der von grad gegebenen Ausgang eines list mit 3 Elemente:

[[1]] 
y * z 

[[2]] 
x * z 

[[3]] 
x * y 
Verwandte Themen