2012-04-17 3 views
8

В R есть способ построения двумерных кривых, заданных уравнениями? Например, как я могу построить гиперболу, заданную уравнением x^2 - 3 * y^2 + 2 * x * y - 20 = 0?Кривые построения кривой, заданные уравнениями в R

+1

Я действительно полагаю, что те будут гиперболы (или что-то правильное множественное число от этого слова). –

+0

Спасибо, @DWin, исправлено. – Leo

ответ

15

Вы можете использовать contour, чтобы построить две ветви вашей гиперболы.

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

Сорта удивлен тем, что нет способа построить это прямо. 'plot (fun = ..., xlim = ..., ylim = ...)' или способ передать x и y в 'stat_function' в' ggplot2'. – Justin

+0

Хорошо, я понятия не имею, как работает это 'внешнее' заявление. Я мог бы получить подобный сюжет, решив сначала «x» или «y», но это очень эффективно. Позаботьтесь об этом? – thelatemail

+1

'external (x, y, f)' возвращает матрицу 'z [i, j] = f (x [i], y [j])', , т. Е. Оценивает функцию на сетке. Вы можете попробовать 'image (z)' или 'contour (z)' для визуализации 'z'. Решение для x или y численно проблематично , поскольку для заданного значения x, может быть несколько соответствующих значений y. (Конечно, это можно легко сделать формально с компьютерной алгебраической системой: maxima, yacas и т. Д.) –

1

Только для записи - версии 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

может быть, решение может быть Преобразуя уравнение в формуле и использование кривой(), чтобы сделать Участок.

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

Смежные вопросы