Die Darstellung einer impliziten Gleichung als Konturplot ist übertrieben. Im Grunde genommen verwirfst du 99,99% der Berechnungen, die du gemacht hast.
Besser ist es, den Wert von y für ein gegebenes x zu finden, bei dem die Gleichung 0 wird. Hier ist der Code unter Verwendung von uniroot in base R.
R-Code unter Verwendung von uniroot aus base R
x = seq(0, 0.995, length = 100) # keine reale Null über x = 0.995
root <- function(a) {
uniroot(function(x,y) 1 - 0.125 * y^2 - x^2 - 0.005, c(0, 3), x = a )$root #nur am Root interessiert
}
y <- sapply(x, root)
plot(x,y, type = "l")
Ok, das c(0, 3) im Argument von uniroot ist der Bereich der y-Werte, in dem der Nullpunkt liegt. so wird für jeden gegebenen x-Wert uniroot nach einem y-Wert zwischen 0 und 3 für eine Null suchen.
R-Code unter Verwendung von fsolve aus dem Paket pracma
library("pracma")
x <- seq(0,0.995, length=100)
fun <- function(y) c(1 - 0.125 * y^2 - x^2 - 0.005)
y_sol <- fsolve(fun, rep(1, length(x)))$x
plot(x,y_sol, type="l")
fsolve akzeptiert die Funktion, deren Nullpunkt gesucht wird, und Vermutungswerte für y für jeden gegebenen Wert von x. Hier sagen wir, dass die y-Werte nahe bei 1 liegen. wir geben ihm einen Erratungswert von 1's
uniroot möchte einen begrenzten Bereich, um nach dem Nullpunkt zu suchen, fsolve erfordert eine Vermutung, wo der Nullpunkt sein könnte.
Dies sind schnellere Möglichkeiten, um implizite Gleichungen darzustellen. Anschließend können Sie jedes Grafikpaket wie ggplot2/rbokeh zur Darstellung verwenden.
Ich habe keine Benchmarks durchgeführt, daher kann ich nicht sagen, welche Methode schneller ist. Für eine so einfache implizite Funktion spielt es jedoch keine Rolle.