2012-04-10 9 views
18

Esiste un modo per R di risolvere per l'inverso di una funzione a variabile singola data? La motivazione è per me per poi dire a R di usare un vettore di valori come input della funzione inversa in modo che possa sputare i valori delle funzioni inverse.Risoluzione per l'inverso di una funzione in R

Ad esempio, ho la funzione y (x) = x^2, l'inverso è y = sqrt (x). C'è un modo in cui R può risolvere la funzione inversa?

Ho cercato su uniroot(), ma non sto risolvendo per lo zero di una funzione.

Qualsiasi suggerimento sarebbe utile.

Grazie!

risposta

25

Che tipo di inverso trovi? Se stai cercando un'inversione simbolica (ad es. Una funzione y identicamente uguale a sqrt (x)) dovrai usare un sistema simbolico. Guardare ryacas per una libreria R per connettersi con un sistema algebra computerizzato che può probabilmente calcolare invers, Yacas.

Ora, se avete bisogno solo di calcolare inverse punto-saggio, è possibile definire la funzione in termini di uniroot come hai scritto:

> inverse = function (f, lower = -100, upper = 100) { 
    function (y) uniroot((function (x) f(x) - y), lower = lower, upper = upper)[1] 
} 

> square_inverse = inverse(function (x) x^2, 0.1, 100) 

> square_inverse(4) 
[1] 1.999976 

Per un dato y e f(x), questo calcolerà x tale che f(x) = y, noto anche come l'inverso.

+1

molto bello, anche se i punti e virgola non sono necessari ... –

+1

Ah, R non è la mia lingua principale, quindi non sono mai sicuro di quale sia lo stile ... Lo aggiusterò. –

+0

Stavo per suggerire di generare un grande vettore 'y <- f (seq (0,100, .001)' e usare i risultati per costruire una funzione di distribuzione di x in termini di y tramite 'ecdf' o strumenti simili, ma il metodo di Mike è probabilmente meglio –