求matlab高手看看,程序为何死循环 10

functions=Self_Adaptive_integral(a,b,tol,M)%input:a--下限%b--下限%tol--thetolerance(容差)%m... function s=Self_Adaptive_integral(a,b,tol,M)
%input: a--下限
% b--下限
% tol--the tolerance(容差)
% m--初始设置的步数
h=(b-a)/M;%步距
s=0;
for i=1:M
x=a+(i-1)*h;
y=a+i*h;
to=abs(simpson_integral(x,y,2)+simpson_integral(x,y,1))/10;
j=1;
while(to>=tol) %循环直到to<tol为止
j=j+1;
to=(abs(simpson_integral(x,y,2^j)-simpson_integral(x,y,1)))/10;
%精度测试式
end
s=s+simpson_integral(x,y,2^j);
end

function y=f(x)
syms x;
y=sqrt(x)*log(x);

function s=simpson_integral(a,b,m)
%input: a--下限
% b--上限
% m--步数
h=(b-a)/(2*m);
s1=0;
s2=0;
for i=1:(m-1)
x=a+2*i*h;
s1=s1+limit(f,x);
end
for i=1:m;
x=a+(2*i-1)*h;
s2=s2+limit(f,x);
end
s=h/3*(limit(f,a)+limit(f,b)+2*s1+4*s2);
s=double(s);

Self_Adaptive_integral(0,1,1e-4,3);
运行后死循环。。。。
展开
 我来答
losloslos
2011-11-21 · TA获得超过910个赞
知道小有建树答主
回答量:263
采纳率:0%
帮助的人:220万
展开全部
while(to>=tol) %循环直到to<tol为止
j=j+1;
to=(abs(simpson_integral(x,y,2^j)-simpson_integral(x,y,1)))/10;
%精度测试式
end

建议你不要用while循环,用个for循环,限定下最大可以承受的循环次数
再建议你把to定义成数组,这样你能很直观的看到to是否是在收敛的。如果不收敛,你就要好好检查下你的算法了哦。。。
追问
大侠可妨帮忙调试哈
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式