为什么我的函数找不到参数?

时间:2018-01-28 06:12:29

标签: r function

我正在尝试执行一个执行二分法的函数。但是我收到很多我不理解的错误。代码是:

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 "}"

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

1 个答案:

答案 0 :(得分: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
    }
  }
}

但是我猜你还想在最后的其他情况下再做一次:

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混淆了。 请参阅ifelse:https://www.datamentor.io/r-programming/ifelse-function 如果:https://www.datamentor.io/r-programming/if-else-statement