首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cantor函数的计算与绘图

cantor函数的计算与绘图
EN

Stack Overflow用户
提问于 2021-05-09 12:36:06
回答 2查看 311关注 0票数 0

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

设f0( x ) =x。

然后,对于每一个整数n fn+1(x),下一个函数≥(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.

这是我的密码:

代码语言:javascript
复制
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。

是否有一种方法可以在向量上只有一个输入,或者如何重写代码以使其工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-09 12:44:16

您可以使用sapplyfor循环来实现向量的工作。

代码语言:javascript
复制
x=seq(0,1,0.01)
y <- sapply(x, cantor, n = 3)

使用for循环:

代码语言:javascript
复制
y <- numeric(length(x))
for(i in seq_along(y)) {
  y[i] <- cantor(x[i], 3)
}
票数 0
EN

Stack Overflow用户

发布于 2021-05-09 18:34:21

我们可以使用lapply

代码语言:javascript
复制
x <- seq(0, 1, 0.01)
y <- unlist(lapply(x, cantor, n = 3))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67457758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档