我正在尝试执行一个执行二分法的函数。但是我收到很多我不理解的错误。代码是:
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 "}"
如果有人能够指出我做错了什么,我将非常感激。 提前谢谢!
答案 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