📄 simpadpt.m
字号:
function [integ,xfv,nfv]=simpadpt(a,b,tol,fun,hmin);integ=0; level=0; i=1; alfa(i)=a; beta(i)=b; step=(beta(i)-alfa(i))/4; nfv=0;for k=1:5, x=a+(k-1)*step; f(i,k)=eval(fun); nfv=nfv+1; endwhile (i > 0), S=0; S2=0; h=(beta(i)-alfa(i))/2; S=(h/3)*(f(i,1)+4*f(i,3)+f(i,5)); h=h/2; S2=(h/3)*(f(i,1)+4*f(i,2)+f(i,3)); S2=S2+(h/3)*(f(i,3)+4*f(i,4)+f(i,5)); tolrv=tol*(beta(i)-alfa(i))/(b-a); errrv=abs(S-S2)/10; if (errrv > tolrv) i=i+1; alfa(i)=alfa(i-1); beta(i)=(alfa(i-1)+beta(i-1))/2; f(i,1)=f(i-1,1);f(i,3)=f(i-1,2);f(i,5)=f(i-1,3);len=abs(beta(i)-alfa(i)); if (len >= hmin), if (len <= 11*hmin) disp(' Steplength close to hmin '), str=sprintf('The approximate integral is %12.7e',integ);disp(str),end; step=len/4; x=alfa(i)+step; f(i,2)=eval(fun); nfv=nfv+1; x=beta(i)-step; f(i,4)=eval(fun); nfv=nfv+1; else, xfv=xfv'; disp(' Too small steplength ') str=sprintf('The approximate integral is %12.7e',integ); disp(str), return end, else integ=integ+S2; level=level+1; if (level==1), for k=1:5, xfv(k)=alfa(i)+(k-1)*h; end; ist=5; else, for k=1:4, xfv(ist+k)=alfa(i)+k*h; end; ist=ist+4; end; if (beta(i)==b), xfv=xfv'; str=sprintf('The approximate integral is %12.7e',integ); disp(str), return, end; i=i-1; alfa(i)=beta(i+1); f(i,1)=f(i+1,5); f(i,3)=f(i,4); step=abs(beta(i)-alfa(i))/4; x=alfa(i)+step; f(i,2)=eval(fun); nfv=nfv+1; x=beta(i)-step; f(i,4)=eval(fun); nfv=nfv+1; endend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -