2012-04-17 11 views
8

En R, ¿hay alguna manera de trazar curvas 2D dadas por ecuaciones? Por ejemplo, ¿cómo puedo trazar la hipérbola dada por la ecuación x^2 - 3 * y^2 + 2 * x * y - 20 = 0?Curvas de trazado dadas por ecuaciones en R

+1

sí creo que los será hipérbolas (o lo que sea el plural de esa palabra adecuada es). –

+0

Gracias, @DWin, corregido. – Leo

Respuesta

15

Puede usar contour para trazar las dos ramas de su hipérbola.

f <- function(x,y) x^2 - 3*y^2 + 2*x*y - 20 
x <- y <- seq(-10,10,length=100) 
z <- outer(x,y,f) 
contour(
    x=x, y=x, z=z, 
    levels=0, las=1, drawlabels=FALSE, lwd=3 
) 

enter image description here

+0

Sorta sorprendió que no hay una manera de trazar esto directamente. 'plot (fun = ..., xlim = ..., ylim = ...)' o una forma de enviar xey a 'stat_function' en' ggplot2'. – Justin

+0

De acuerdo, no tengo idea de cómo funciona la declaración 'outer'. Podría obtener una trama similar al resolver 'x' o' y' primero, pero esto es muy eficiente. ¿Le importaria explicar? – thelatemail

+1

'outer (x, y, f)' devuelve la matriz 'z [i, j] = f (x [i], y [j])', es decir, evalúa la función en una grilla. Puede intentar 'image (z)' o 'contour (z)' para visualizar 'z'. Resolver numéricamente x o y es problemático porque, para un valor dado de x, , puede haber varios valores correspondientes de y. (Por supuesto, se puede hacer fácilmente con un sistema de álgebra computarizada: máximos, yacas, etc.) –

1

Sólo para el registro - una versión ggplot

library(ggplot2) 
library(dplyr) 
f <- function(x,y) x^2 - 3*y^2 + 2*x*y - 20 
seq(-10,+10,length=100) %>% 
    expand.grid(x=.,y=.) %>% 
    mutate(z=f(x,y)) %>% 
    ggplot + 
    aes(x=x,y=y,z=z) + 
    stat_contour(breaks=0) 

enter image description here

0

tal vez la solución se puede transformando la ecuación en una curva de fórmula y el uso() para realizar Una parcela.

curve(sqrt(4/9*x^2-20/3) + x/3,-20,20)

Cuestiones relacionadas