Próbuję wykreślić "bokiem" lub poziomą funkcję kwadratową w r, ale biegam w kwestii posiadania sqrt(-x), który jest oczywiście problemem.

eq1 = function(x){ -60*(sqrt(1-x)-1) }
eq2 = function(x){ 60*(sqrt(1-x)+1) }

plot(eq1, 0, 100, add=TRUE, xlim=c(0,1), ylim=c(0,100))
plot(eq2, 0, 100, add=TRUE)

Oto przykład wykresu wyjściowego

enter image description here

I wyjście z konsoli R:

> eq1 = function(x){ -60*(sqrt(1-x)-1) }
> eq2 = function(x){ 60*(sqrt(1-x)+1) }
> 
> 
> plot(eq1, 0, 100, add=TRUE, xlim=c(0,1), ylim=c(0,100))
Warning messages:
1: In curve(expr = x, from = from, to = to, xlim = xlim, ylab = ylab,  :
  'add' will be ignored as there is no existing plot
2: In sqrt(1 - x) : NaNs produced
> plot(eq2, 0, 100, add=TRUE)
Warning message:
In sqrt(1 - x) : NaNs produced

Jeśli rozumiem poprawnie, istnieją ograniczenia domeny na funkcji kwadratowej w ten sposób. Jeśli tak, czy istnieje sposób, aby włączyć je do funkcji określonej w R? Czy jest lepszy sposób na rysowanie tej funkcji?

r
3
Didymops 16 luty 2017, 19:42

2 odpowiedzi

Najlepsza odpowiedź

Musisz prawidłowo zdefiniować zakres, który chcesz wykreślić funkcję z argumentem x do plot.function:

plot(eq1, seq(0, 1, 0.01), xlim=c(0,1), ylim=c(0,100))
plot(eq2, seq(0, 1, 0.01), add=TRUE)

Właściwie plot.function jest wystarczająco mądry, że nawet bez zasięgu rozwiązuje to dla Ciebie:

plot(eq1, xlim=c(0,1), ylim=c(0,100))
plot(eq2, add=TRUE)

enter image description here

(Bez ostrzeżeń).

2
Axeman 16 luty 2017, 17:03

Chyba że czegoś nie przegapiłem. Nie używać abs:

eq1 = function(x){ -60*(sqrt(abs(1-x))-1) }
eq2 = function(x){ 60*(sqrt(abs(1-x))+1) }



plot(eq1, 0, 100, add=FALSE, xlim=c(0,1), ylim=c(0,100))
plot(eq2, 0, 100, add=TRUE)
1
thisisrg 16 luty 2017, 16:55