我有以下功能:
function [ rad,it ] = bisect( f,a,b,Eps,it,maxit )
X=a:0.1:b;
Y=f(X);
plot(X,Y);
title(sprintf('eps=%d',Eps));
hold on;
format long e;
fa=feval(f,a);
if(abs(fa)<=Eps)
rad=a;
return;
end
fb=feval(f,b);
if(abs(fb)<=Eps)
rad=b;
return;
end
str=sprintf('a= %d b= %d, fa= %d, fb= %d, it= %d',a,b,fa,fb,it);
disp(str);
if(fa*fb>0)
error('Unvalid interval');
end
mean=(a+b)/2;
fmean=feval(f,mean);
plot(mean,fmean,'--mo');
if(abs(fmean)<=Eps)
rad=mean;
return;
else
it=it+1;
if(it==maxit)
rad=mean;
warning('Reached maxit but precision is greater than epsilon');
return;
end
if(fa*fmean<0)
[rad,it]=bisect(f,a,mean,Eps,it,maxit);
else
[rad,it]=bisect(f,mean,b,Eps,it,maxit);
end
end
end
上述函数应该使用二分法计算函数的根,并绘制函数和中间结果。
出于某种原因,它现在没有绘制任何东西,但之前正在密谋。我刚在每个return语句之前添加了figure();
并再次将其删除。现在它不再绘制,即使我关闭了Matlab或重新启动系统。