【问题标题】:Why can't my function find arguments?为什么我的函数找不到参数?
【发布时间】:2018-01-28 06:12:28
【问题描述】:

我正在尝试执行一个执行二分法的函数。但是我得到了很多我不明白的错误。代码是:

bisection<-function(f,a,b,n=1000,tol=1e-9)
{
  if(!(f(a)<0) && (f(b)>0)){stop}; 
  elseif((f(a)>0) && (f(b)<0)){stop}; 
  for (i in 1:n){
    c=(a+b)/2;
    if((f(c)==0)||((b-a)/2)<tol){return(c)}; 
    elseif(sign(f(c))==sign(f(a)),a<-c,b<-c);
  }
}

我从 R 得到以下信息:

> bisection<-function(f,a,b,n=1000,tol=1e-9)
+ {
+   if(!(f(a)<0) && (f(b)>0)){stop}; 
+   elseif((f(a)>0) && (f(b)<0)){stop}; 

Error: unexpected '{' in:
"  if(!(f(a)<0) && (f(b)>0)){stop} 
  elseif((f(a)>0) && (f(b)<0)){"

>   for (i in 1:n){
+     c=(a+b)/2;
+     if((f(c)==0)||((b-a)/2)<tol){return(c)}; 
+     #elseif(sign(f(c))==sign(f(a)),a<-c,b<-c);
+   }

Error: object 'n' not found

> }

Error: unexpected '}' in "}"

如果有人能指出我做错了什么,我将不胜感激。 提前谢谢!

【问题讨论】:

  • 您希望bisection 输出的结果应该是什么?

标签: r function


【解决方案1】:

我试图纠正你的功能。所以它不会导致错误:

bisection<-function(f,a,b,n=1000,tol=1e-9)
{
  if(!(f(a)<0) && (f(b)>0)){stop}
  else if((f(a)>0) && (f(b)<0)){stop}
  for (i in 1:n){
    c=(a+b)/2
    if((f(c)==0)||((b-a)/2)<tol){
      return(c)
      }
    else if(sign(f(c))==sign(f(a))){
      a<-c
      b<-c
    }
  }
}

但我猜你想在最后一个 else if 中使用另一个 else 案例:

bisection<-function(f,a,b,n=1000,tol=1e-9)
{
  if(!(f(a)<0) && (f(b)>0)){stop}
  else if((f(a)>0) && (f(b)<0)){stop}
  for (i in 1:n){
    c=(a+b)/2
    if((f(c)==0)||((b-a)/2)<tol){
      return(c)
    }
    else if(sign(f(c))==sign(f(a))){
      a<-c
    }else{
      b<-c
    }
  }
}

此外,您似乎将 ifelse 与 else if 的概念混淆了。 查看 ifelse:https://www.datamentor.io/r-programming/ifelse-function 否则如果:https://www.datamentor.io/r-programming/if-else-statement

【讨论】:

  • 谢谢,错误现在消失了,但现在看来,如果我用 a 和 b 的任意值调用函数,它只返回 c=(a+b)/2 并跳过其余部分.
  • @AnnieFrannie 你的函数 f 是什么样的?也许对于 i =1 来说它总是正确的
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 2020-04-02
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多