# Ecco un possibile modo di tracciare i grafici di alcune # equazioni di due variabili: # (x-2*y)^2+3*y = 4, (x-y)*(x+2*y)+3*y = 4, # 0.5*x^2+y^2+3*y = 4, (x+y)*(x-y) = 0 # Scelgo la parte di piano in cui tracciare i grafici # e prendo, ad es., 1000 punti in ciascuno dei due intervalli x1 <- -5; x2 <- 5; y1 <- -5; y2 <- 5 x <- seq(x1,x2,len=1000); y <- seq(y1,y2,len=1000) # Considero le funzioni che eguagliate a 0 siano equivalenti alle equazioni f <- function(x,y) (x-2*y)^2+3*y - 4 g <- function(x,y) (x-y)*(x+2*y)+3*y-4 h <- function(x,y) 0.5*x^2+y^2+3*y-4 k <- function(x,y) (x+y)*(x-y) # Con le seguente riga traccio la curva f(x,y)=0 (lwd sceglie lo spessore, col # il colore; metto asp=1 se voglio il sistema momometrico, se no lo tolgo) # [in realtà viene tracciata la curva di livello alla quota 0 della # superficie z = f(x,y), ma non ci preoccupiamo di questo] z <- outer(x,y,f); contour(x,y,z,levels=0,drawlabels=FALSE, lwd=3,col="blue",asp=1) abline(h=axTicks(2), v=axTicks(1),lty=3,col="blue") abline(h=0, v=0,lty=2,col="blue") # Traccio, analogamente, gli altri grafici. z <- outer(x,y,g); contour(x,y,z,levels=0,lwd=3,col="red",add=TRUE,drawlabels=FALSE) z <- outer(x,y,h); contour(x,y,z,levels=0,lwd=3,col="green",add=TRUE,drawlabels=FALSE) z <- outer(x,y,k); contour(x,y,z,levels=0,lwd=3,col="orange",add=TRUE,drawlabels=FALSE) # Ottengo: # # Caricando questo file farei tutto molto più semplicemente: source("http://macosa.dima.unige.it/r.R") ] f <- function(x,y) (x-2*y)^2+3*y - 4 g <- function(x,y) (x-y)*(x+2*y)+3*y-4 h <- function(x,y) 0.5*x^2+y^2+3*y-4 k <- function(x,y) (x+y)*(x-y) noBox=1; boxM(-5,5, -5,5) curva(f,"blue"); curva(g,"red") curva(h,"green"); curva(k,"orange") # # # # Volendo potrei procedere nel seguente modo (evita il tracciamento di tratti # di curva inesistenti che si potrebbe avere in alcuni casi particolari col # procedimento precedente) # Viene scandito il piano in (n+1)*(n+1) punti e viene calcolato # se l'equazione è ivi verificata (a meno di un certo ε) x1 <- y1 <- -5; x2 <- y2 <- 5 plot(c(x1,x2),c(y1,y2),type="n",xlab="", ylab="",asp=1) abline(v=seq(x1,x2,1),h=seq(y1,y2,1),lty=3) abline(v=0,h=0) n <- 500; dx <- (x2-x1)/n; dy <- (y2-y1)/n; I <- 0:n; J <- 0:n for(i in I) for(j in J) {x <- x1+dx*i;y <- y1+dy*j; if (abs((x-y)*(x+2*y)+3*y-4)<0.05) points(x,y,pch=".",cex=3,col="red")} # Vediamo come ottenere il grafico di tutte 4: plot(c(x1,x2),c(y1,y2),type="n",xlab="", ylab="",asp=1) abline(v=seq(x1,x2,1),h=seq(y1,y2,1),lty=3) abline(v=0,h=0) for(i in I) for(j in J) {x <- x1+dx*i;y <- y1+dy*j; if (abs((x-2*y)^2+3*y-4)<0.05) points(x,y,pch=".",cex=3,col="blue"); if (abs((x-y)*(x+2*y)+3*y-4)<0.05) points(x,y,pch=".",cex=3,col="red") if (abs(0.5*x^2+y^2+3*y-4)<0.05) points(x,y,pch=".",cex=3,col="green") if (abs((x+y)*(x-y))<0.01) points(x,y,pch=".",cex=3,col="orange")}