Watanabe理論勉強会というのやっているのですが、スライドの中にある代数的集合のプロットはRを使って描いています。
多項式ごとにひとつひとつ描いていたのですが、面倒になってきたので関数化してみます。
R
plot_algebraic_set <- function(f, xlim = c(-1, 1), ylim = c(-1, 1),
main = NULL, lwd = 2, ...) {
if(is.null(main)) {
main <- parse(text = sprintf('paste(%s, " = 0")', deparse(body(f))))
}
x_range <- seq(xlim[1], xlim[2], length.out = 100)
y_range <- seq(ylim[1], ylim[2], length.out = 100)
z <- vapply(y_range, function(y) {
vapply(x_range, f, numeric(1), y = y)
}, numeric(100))
contour(x_range, y_range, z, nlevels = 1, method = "edge",
xlim = xlim, ylim = ylim, main = main, lwd = lwd, ...)
}
これを使うと、多項式に対する代数的集合が簡単に描画できます。1
スライドにある Example 1 から 5 までを描画してみましょう。
R
# Example 1
f1 <- function(x, y) y - x^3
plot_algebraic_set(f1, xlim = c(-2, 2), ylim = c(-3, 3))
R
# Example 3
f3 <- function(x, y) x * y
plot_algebraic_set(f3, main = "xy = 0")
R
# Example 4
f4 <- function(x, y) y^2 - x^3
plot_algebraic_set(f4, xlim = c(-0.5, 2), ylim = c(-3, 3))
R
f5 <- function(x, y) x^5 - y^3
plot_algebraic_set(f5)
同じ図が描けました。
Enjoy!
-
ただし、2次元限定です。 ↩