计算和绘制康托尔函数

Computing and plotting the cantor function

我想在 R 中实现 cantor 函数并绘制它。我只知道 Python 和 Java 所以 R 对我来说是新的。 康托尔函数定义为:


令 f0(x) = x。

然后,对于每个整数 n ≥ 0,下一个函数 fn+1(x) 将根据 fn(x) 定义如下:

令 fn+1(x) = 1/2 × fn(3x),当 0 ≤ x ≤ 1/3 ;

设fn+1(x) = 1/2,当1/3 ≤ x ≤ 2/3 ;

令 fn+1(x) = 1/2 + 1/2 × fn(3 x − 2),当 2/3 ≤ x ≤ 1.


这是我的代码:

cantor <- function(x,n){
  if (n==0){
    return(x)
  }else{
    if(0 <= x & x <= 1/3){
      return(1/2*cantor(3*x,n-1))
  }else if(1/3 < x & x < 2/3){
    return(1/2)
  }else{
    return(1/2+1/2*cantor(3*x-2,n-1))
  }
  }
}

只要它只有一个输入,它就可以很好地工作。 但如果我试着把它画出来 x=seq(0,1,0.01) 它不起作用,因为我的条件是针对单个输入,但 R 将整个向量 x 提供给我的函数。

有没有办法在一个向量上只有一个输入,或者我该如何重写我的代码才能让它工作。

您可以使用 sapplyfor 循环使向量工作。

x=seq(0,1,0.01)
y <- sapply(x, cantor, n = 3)

使用 for 循环:

y <- numeric(length(x))
for(i in seq_along(y)) {
  y[i] <- cantor(x[i], 3)
}

我们可以使用lapply

x <- seq(0, 1, 0.01)
y <- unlist(lapply(x, cantor, n = 3))