计算和绘制康托尔函数
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 提供给我的函数。
有没有办法在一个向量上只有一个输入,或者我该如何重写我的代码才能让它工作。
您可以使用 sapply
或 for
循环使向量工作。
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))
我想在 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 提供给我的函数。
有没有办法在一个向量上只有一个输入,或者我该如何重写我的代码才能让它工作。
您可以使用 sapply
或 for
循环使向量工作。
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))