我已经为实现pracma的arclength()函数而挣扎了很长一段时间。根据我到目前为止所尝试的,我得到的两个错误是:
Error in arclength(f, t1, t2) : 
  Argument 'f' must be a parametrized function. 或
Error in arclength(f, t1, t2) : 
  Argument 'f' must be a vectorized function.我有一条参数曲线,定义为3个表达式的向量。曲线是位于平面z=-1上的椭圆,由下式给出:
inputCurve = expression(0.5*cos(t), sin(t),-1)我的代码是直接从文档中摘取的。理想情况下,代码应该相对于arcLength重新参数化inputCurve:
arcLengthUtil$arcLengthParametrize <- function(inputCurve){
  
  
  
  f <- function(t) c(eval(quote(inputCurve)))
  
  
  t1<-0; t2<- 2*pi
  a<-0;b<-arclength(f,t1,t2)$length
  
  fParam <-function(s){
    fct <- function(u) arclength(f,a,u)$length -s
    urt<- uniroot(fct, c(a, 2*pi))
    urt$root
  }
 
  return(fParam)
}我将表达式作为向量传递给f,所以我不确定为什么会得到这个错误。根据我的理解,eval()应该返回一个可以在f中调用的表达式。我尝试在f上使用向量化()函数,然后将其传递给arcLength(),但收到错误,即'f‘必须是参数化函数。我觉得这是一个相当简单的问题,但如果有人能提供一些建议,我将不胜感激。谢谢
##  Example: parametrized 3D-curve with t in 0..3*pi
f <- function(t) c(sin(2*t), cos(t), t)
arclength(f, 0, 3*pi)这是文档中的一个示例,我只是想知道如何将由表达式向量定义的输入曲线传递到函数'f‘中,因为我需要以上面所述的形式声明曲线。
发布于 2021-05-20 12:45:01
一些不可靠的代码,但如果你需要使用表达式的向量,这是可行的。
f <- eval(parse(text=paste0("function(t) c(t*0+",paste(inputCurve,collapse=",t*0+"),")")))这将创建一个在arclength函数中使用的函数f,其语法与问题中的语法相同。当并非所有表达式都包含变量输入时,f需要collapse参数的t*0+部分才能返回与输入长度相同的向量。
https://stackoverflow.com/questions/67613616
复制相似问题