2012-04-17 44 views
8

Trong R, có cách nào để vẽ các đường cong 2D được đưa ra bởi các phương trình không? Ví dụ, làm thế nào tôi có thể âm mưu hyperbola được đưa ra bởi phương trình x^2 - 3 * y^2 + 2 * x * y - 20 = 0?Vẽ các đường cong được đưa ra bởi các phương trình trong R

+1

Tôi tin rằng những người đó sẽ là hyperbolae (hoặc bất kỳ số nhiều của từ đó là đúng). –

+0

Cảm ơn, @DWin, đã sửa. – Leo

Trả lời

15

Bạn có thể sử dụng contour để vẽ hai nhánh của hyperbola của bạn.

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 ngạc nhiên rằng không có cách nào để vẽ trực tiếp điều này. 'plot (fun = ..., xlim = ..., ylim = ...)' hoặc cách để nạp x và y vào 'stat_function' trong' ggplot2'. – Justin

+0

Được rồi, tôi không biết làm thế nào mà câu lệnh 'bên ngoài' hoạt động. Tôi có thể có được một âm mưu tương tự bằng cách giải quyết 'x' hoặc' y' trước, nhưng điều này rất hiệu quả. Quan tâm để giải thích? – thelatemail

+1

'bên ngoài (x, y, f)' trả về ma trận 'z [i, j] = f (x [i], y [j])', tức là, nó đánh giá hàm trên lưới. Bạn có thể thử 'image (z)' hoặc 'contour (z)' để hiển thị 'z'. Giải quyết cho x hoặc y số là vấn đề bởi vì, đối với một giá trị nhất định của x, có thể có một số giá trị tương ứng của y. (Tất nhiên, nó có thể dễ dàng được thực hiện chính thức với Hệ thống đại số máy tính: maxima, yacas, v.v.) –

1

Chỉ cần cho các hồ sơ - một phiên bả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

có lẽ là giải pháp có thể được chuyển đổi phương trình thành một công thức và sử dụng đường cong() để thực hiện một âm mưu.

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

Các vấn đề liên quan