2012-04-10 14 views
18

¿Hay alguna manera de que R resuelva el inverso de una función variable dada? La motivación es que luego le diga a R que use un vector de valores como entradas de la función inversa para que pueda escupir los valores de la función inversa.Resolviendo para el inverso de una función en R

Por ejemplo, tengo la función y (x) = x^2, la inversa es y = sqrt (x). ¿Hay alguna manera de que R pueda resolver la función inversa?

He buscado uniroot(), pero no estoy resolviendo el cero de una función.

Cualquier sugerencia sería útil.

Gracias!

Respuesta

25

¿Qué tipo de inverso encuentras? Si busca una inversión simbólica (por ejemplo, una función y que sea idéntica a sqrt (x)) tendrá que usar un sistema simbólico. Mira ryacas para una biblioteca R para conectar con un sistema de álgebra de computadora que probablemente pueda calcular inversas, Yacas.

Ahora, si sólo se necesita para calcular las inversas de punto-sabia, puede definir su función en términos de uniroot como usted ha escrito:

> 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 

Para un determinado y y f(x), esto va a calcular x tal que f(x) = y, también conocido como el inverso.

+1

muy bonito, aunque los puntos y comas son innecesarios ... –

+1

Ah, R no es mi idioma principal, así que nunca estoy seguro de qué es el estilo ... Lo arreglaré. –

+0

Iba a sugerir generar un gran vector 'y <- f (seq (0,100, .001)' y usar los resultados para construir una función de distribución de x en términos de y mediante 'ecdf' o herramientas similares, pero el método de Mike es probablemente mejor. –

Cuestiones relacionadas