2017-05-28 4 views
0

Also habe ich eine Funktion definiert bedingt wie im folgenden R-Code gezeigt, und es ist die Integration zwischen -1 und t.Zeichnen einer inversen Funktion mit R

f <- function(x) ifelse((x<=1 & x>=-1),3/4*(1-x^2),0) 
F <- function(t) integrate(Vectorize(f),-1,t)$value 

Durch die Verwendung von:

plot(Vectorize(F),-2,2); 

ich die Kurve von F. bekommen

Jetzt i die inverse Funktion von F darstellen möchten, so dass nach einigen Forschung i die uniroot Funktion gefunden und versuchte es so zu benutzen:

Finv <- function(s) uniroot(function(t) F(t) - s, lower=-1,upper=1) 

um die Funktion F (x) = y in [-1,1] zu lösen. Aber wenn man versucht, das Ergebnis zu zeichnen:

plot(Vectorize(Finv),-2,2) 

Ich erhalte den folgenden Fehler:

Error in uniroot(function(t) F(t) - s, lower = -1, upper = 1) : 
     f() values at end points not of opposite sign 

ich kann nicht verstehen, was ist das Problem?

Antwort

1

Für x in [-1,1] nimmt F Werte von 0 bis 1 an. Daher ist Finv nur für [0,1] definiert. Sie können es nicht plotten [-2,2]. Wenn Sie Ihr Diagramm auf die entsprechende Domäne beschränken, funktioniert es einwandfrei.

plot(Vectorize(Finv),0,1) 
0

Und vergessen Sie nicht die $ root am Ende uniroot den spezifischen Wert zu erhalten:

Finv <- function(s) uniroot(function(t) F(t) - s, lower=-1,upper=1)$root 

So sollte es aussehen (und Arbeit) wie folgt aus:

f <- function(x) ifelse((x<=1 & x>=-1),3/4*(1-x^2),0) 
F <- function(t) integrate(Vectorize(f),-1,t)$value 

Finv <- function(s) uniroot(function(t) F(t) - s, lower=-1,upper=1)$root 

plot(Vectorize(Finv),0,1) 
Verwandte Themen