function Integrate(action) format long if nargin<1, action='initialize'; end; if strcmp(action,'initialize'), figNumber=figure( ... 'Name','Evaluate integrals using the Midpoint, Trapezoid, and Simpson''s rules', ... 'units','normalized',... 'Color', [.5 .5 .5], ... 'pos',[.01 .07 .98 .86],... 'NumberTitle','off', ... 'Visible','on'); axes('units','normalized',... 'Visible','on',... 'position',[.64 .30 .35 .44]); %general info for popup buttons---------------------------------------- side=.05; ypos=.88; poplabelwidth=.09; poplabelheight=.09; %function popup---------------------------------------------------------- labelStrFcn='Function'; popupStr=str2mat('sin(x)',... 'cos(x)','exp(x)','x^c','1/[d+sin(x)]','e^(-cx) * cos(x)','1/[1+(x-pi)^2]','e^x * cos(4x)'); % Generic label information for popup button labelPos=[side-.03 ypos+.03 poplabelwidth+.03 poplabelheight-.03]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'BackgroundColor',[.7 .7 .7], ... 'HorizontalAlignment','center', ... 'String',labelStrFcn); % Generic popup button information btnPos=[side-.03 ypos poplabelwidth+.03 poplabelheight-.03]; popupHndlFcn=uicontrol( ... 'Style','popup', ... 'Units','normalized', ... 'backgroundcolor','white',... 'Position',btnPos, ... 'String',popupStr); %subdivisions popup---------------------------------------------------------- labelStr='Subdivisions'; popupStr=str2mat('1', '2',... '3',... '4','5','6','7'); % Generic label information for popup button labelPos=[side+.11 ypos+.03 poplabelwidth poplabelheight-.03]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'BackgroundColor',[.7 .7 .7], ... 'HorizontalAlignment','center', ... 'String',labelStr); % Generic popup button information btnPos=[side+.11 ypos poplabelwidth poplabelheight-.03]; popupHndlSub=uicontrol( ... 'Style','popup', ... 'Units','normalized', ... 'backgroundcolor','white',... 'Position',btnPos, ... 'String',popupStr); %left endpoint edit---------------------------------------------------------- labelStrLeft='Left Endpt.=a'; % Generic label information for popup button labelPos=[side+.22 ypos+.05 poplabelwidth poplabelheight-.05]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'BackgroundColor',[.7 .7 .7], ... 'HorizontalAlignment','center', ... 'String',labelStrLeft); % Generic popup button information btnPos=[side+.22 ypos+.02 poplabelwidth poplabelheight-.06]; popupHndlLeft=uicontrol( ... 'Style','edit', ... 'Units','normalized', ... 'BackgroundColor','white',... 'string','0',... 'Position',btnPos); %right endpoint edit---------------------------------------------------------- labelStrRight='Right Endpt.=b'; % Generic label information for popup button labelPos=[side+.33 ypos+.05 poplabelwidth poplabelheight-.05]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'BackgroundColor',[.7 .7 .7], ... 'HorizontalAlignment','center', ... 'String',labelStrRight); % Generic popup button information btnPos=[side+.33 ypos+.02 poplabelwidth poplabelheight-.06]; popupHndlRight=uicontrol( ... 'Style','edit', ... 'Units','normalized', ... 'backgroundcolor','white',... 'Position',btnPos, ... 'String','pi/2'); %constant c edit---------------------------------------------------------- labelStrLeft='Constant c'; % Generic label information for popup button labelPos=[side+.22 ypos-.04 poplabelwidth poplabelheight-.05]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'BackgroundColor',[.7 .7 .7], ... 'HorizontalAlignment','Center', ... 'String',labelStrLeft); % Generic popup button information btnPos=[side+.22 ypos-.07 poplabelwidth poplabelheight-.06]; editHndlC=uicontrol( ... 'Style','edit', ... 'Units','normalized', ... 'BackgroundColor','white',... 'string','1',... 'Position',btnPos); %constant d edit---------------------------------------------------------- labelStrRight='Constant d'; % Generic label information for popup button labelPos=[side+.33 ypos-.04 poplabelwidth poplabelheight-.05]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'BackgroundColor',[.7 .7 .7], ... 'HorizontalAlignment','center', ... 'String',labelStrRight); % Generic popup button information btnPos=[side+.33 ypos-.07 poplabelwidth poplabelheight-.06]; editHndlD=uicontrol( ... 'Style','edit', ... 'Units','normalized', ... 'backgroundcolor','white',... 'Position',btnPos, ... 'String','2'); %General info for push buttons---------------------------------- pushleft=.51; pushbottom=.82; pushwidth=.09; pushheight=.08; % The simpson BUTTON----------------------------------------------------------- labelStr='Simpson''s'; callbackStr='Integrate(''simp'')'; cmdStr=str2mat( ... ' % Simpson''s Rule' ... ); % Generic button information btnPos=[pushleft pushbottom-.2 pushwidth pushheight]; uicontrol( ... 'Style','pushbutton', ... 'Units','normalized', ... 'Position',btnPos, ... 'String',labelStr, ... 'Callback',callbackStr, ... 'UserData',cmdStr); % The Trapezodial BUTTON----------------------------------------------------------- labelStr='Trapezoid'; callbackStr='Integrate(''trap'')'; cmdStr=str2mat( ... ' % Trapezoid Rule' ... ); % Generic button information btnPos=[pushleft pushbottom-.1 pushwidth pushheight]; uicontrol( ... 'Style','pushbutton', ... 'Units','normalized', ... 'Position',btnPos, ... 'String',labelStr, ... 'Callback',callbackStr, ... 'UserData',cmdStr); % The Midpoint BUTTON----------------------------------------------------------- labelStr='Midpoint'; callbackStr='Integrate(''midp'')'; cmdStr=str2mat( ... ' % Midpoint Rule' ... ); % Generic button information btnPos=[pushleft pushbottom pushwidth pushheight]; uicontrol( ... 'Style','pushbutton', ... 'Units','normalized', ... 'Position',btnPos, ... 'String',labelStr, ... 'Callback',callbackStr, ... 'UserData',cmdStr); %output fields --------------------------- left=0; bottom=.18; width=.6; height=.42; textstr=str2mat(' ',' % This program determines integrals', ... ' % by various methods.'); framepos=[left bottom width height]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'HorizontalAlignment','center', ... 'Position',framepos, ... 'BackgroundColor',[0.7 0.7 0.7], ... 'ForegroundColor',[0 0 0], ... 'String',' Subdiv: Value: Error: Ratio: '); textHndl=uicontrol( ... 'Style','text', ... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',[left+.07 bottom+.05 width-.405 height-.1], ... 'Callback','simprule', ... 'String',textstr); textHndl2=uicontrol( ... 'Style','text', ... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',[left+.27 bottom+.05 width-.405 height-.1], ... 'Callback','simprule', ... 'String',''); textHndl3=uicontrol( ... 'Style','text', ... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',[left+.02 bottom+.05 width-.555 height-.1], ... 'Callback','simprule', ... 'String',''); textHndl4=uicontrol( ... 'Style','text', ... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',[left+.47 bottom+.05 width-.485 height-.1], ... 'Callback','simprule', ... 'String',''); textHndl8=uicontrol( ... 'Style','text', ... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[.8 .8 .8], ... 'Position',[.18 .61 .15 .03], ... 'Callback','simprule', ... 'String',''); %useless output controls for more results----------------------------------- textHndl5=uicontrol( ... 'Style','text', ... 'Visible','off',... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',[left+.47 bottom+.05 width-.485 height-.1], ... 'Callback','simprule', ... 'String',''); textHndl6=uicontrol( ... 'Style','text', ... 'Visible','off',... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',[left+.47 bottom+.05 width-.485 height-.1], ... 'Callback','simprule', ... 'String',''); textHndl7=uicontrol( ... 'Style','text', ... 'Visible','off',... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',[left+.47 bottom+.05 width-.485 height-.1], ... 'Callback','simprule', ... 'String',''); %Help Button--------------------------------------- labelStr='Help'; callbackStr='integrationhelp'; helpHndl=uicontrol( ... 'Style','push', ... 'Units','normalized', ... 'position',[.82 .15 .15 .08], ... 'string',labelStr, ... 'call',callbackStr); %more results button------------------------------------ labelStr='More Results'; callbackstrmore='Integrate(''moreresults'')'; moreHndl=uicontrol( ... 'Style','push', ... 'Units','normalized', ... 'position',[.2 .07 .2 .05], ... 'string',labelStr, ... 'call',callbackstrmore); %Close Button--------------------------------------- labelStr='Close'; callbackStr='close(gcf)'; closeHndl=uicontrol( ... 'Style','push', ... 'Units','normalized', ... 'position',[.82 .05 .15 .08], ... 'string',labelStr, ... 'call',callbackStr); %-possible errors---------------------------------------- uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',[.65 .89 .32 .03] , ... 'BackgroundColor',[1 1 1], ... 'HorizontalAlignment','left', ... 'String','To Avoid Errors:'); uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',[.65 .86 .32 .03] , ... 'BackgroundColor',[1 1 1], ... 'HorizontalAlignment','left', ... 'String','1) Verify Left Endpt. is not equal to Right Endpt.'); uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',[.65 .83 .32 .03] , ... 'BackgroundColor',[1 1 1], ... 'HorizontalAlignment','left', ... 'String','2) For function x^c, the interval [a,b] should not contain 0 if c < 0'); %function definitions----------------------------------- leftfun=.05; topfun=.62; funwidth=.08; funheight=.08; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',[.05 .68 .37 .03] , ... 'BackgroundColor',[1 1 1], ... 'HorizontalAlignment','left', ... 'String',' See Help for explanations of functions, constants, and errors.'); %data that needs to pass into the next section-------------------- hndlList=[textHndl textHndl2 textHndl3 popupHndlSub popupHndlLeft popupHndlRight popupHndlFcn textHndl4 editHndlC editHndlD helpHndl textHndl5 textHndl6 textHndl7 textHndl8]; passPrmt.handle=hndlList; passPrmt.clmap=[]; set(figNumber,'UserData',passPrmt); elseif strcmp(action,'moreresults') figNumber=gcf; passPrmt=get(figNumber, 'UserData'); hndlList=passPrmt.handle; textHndl3=hndlList(3); sub=get(textHndl3,'String'); textHndl5=hndlList(12); integraldiff=get(textHndl5,'String'); textHndl6=hndlList(13); integralratio=get(textHndl6,'String'); textHndl7=hndlList(14); asymerror=get(textHndl7,'String'); textHndl8=hndlList(15); rule=get(textHndl8,'String'); moreresults(sub,integraldiff,integralratio,asymerror,rule); else %evaluates the integral--------------------------------------------------- figNumber=gcf; passPrmt=get(figNumber, 'UserData'); hndlList=passPrmt.handle; integraldiff=zeros(1,10); integralratio=zeros(1,10); asymerror=zeros(1,10); N=[1 2 3 4 5 6 7]; P=[-2 -1 -1/2 0 1/2 1 2 3 4 5]; F=char('sin','cos','exp','power','cosdiv','ecos','xminpi','ecos4'); textHndl=hndlList(1); textHndl2=hndlList(2); textHndl3=hndlList(3); textHndl4=hndlList(8); textHndl5=hndlList(12); textHndl6=hndlList(13); textHndl7=hndlList(14); textHndl8=hndlList(15); popupHndlSub=hndlList(4); n=get(popupHndlSub,'Value'); n=N(1,n); popupHndlLeft=hndlList(5); a=get(popupHndlLeft,'String'); a=eval(a); popupHndlRight=hndlList(6); b=get(popupHndlRight,'String'); b=eval(b); popupHndlFcn=hndlList(7); fcn=get(popupHndlFcn,'Value'); fcn=deblank(F(fcn,:)); editHndlC=hndlList(9); c=get(editHndlC,'String'); c=eval(c); editHndlD=hndlList(10); d=get(editHndlD,'String'); d=eval(d); if strcmp(action,'simp') %output for simpsons rule------------------------------- [integral,error,sub,ratio,integraldiff,integralratio,asymerror]=simprule(fcn,a,b,n,c,d,integraldiff,integralratio,asymerror); set(textHndl8,'String','Simpson''s Rule'); elseif strcmp(action,'trap') %output for trapzoid rule---------------------------- [integral,error,sub,ratio,integraldiff,integralratio,asymerror]=trap(fcn,a,b,n,c,d,integraldiff,integralratio,asymerror); set(textHndl8,'String','Trapezoid Rule'); elseif strcmp(action,'midp') %output for midpoint rule------------------------------- [integral,error,sub,ratio,integraldiff,integralratio,asymerror]=midp(fcn,a,b,n,c,d,integraldiff,integralratio,asymerror); set(textHndl8,'String','Midpoint Rule'); end if a < b t=a:.01:b; else t=b:.01:a; end hold off cla; xmin=min(a,b); xmax=max(a,b); axis([xmin xmax 0 4]); axis 'auto y'; hold on if strcmp(fcn,'power') y=feval(fcn,t,c); plot(t,y); powlegend=strcat('x^(',num2str(c),')'); legend(texlabel(powlegend),0); elseif strcmp(fcn,'cosdiv') y=feval(fcn,t,1,d); plot(t,y); legend(strcat('1/[',num2str(d),'+sin(x)]'),0); elseif strcmp(fcn,'ecos') y=feval(fcn,t,c); plot(t,y); c=(-1)*c; ecosleg=strcat('e^(',num2str(c),'x) cos(x)'); legend(texlabel(ecosleg),0); else y=feval(fcn,t); plot(t,y); if strcmp(fcn,'sin') legend('sin x',0); elseif strcmp(fcn,'cos') legend('cos x',0); elseif strcmp(fcn,'exp') legend('e^x',0); elseif strcmp(fcn,'xminpi') legend('1 / [1+(x-\pi)^2]',0); elseif strcmp(fcn,'ecos4') legend('e^x cos(4x)',0); end end outputstr=str2mat(sprintf('%2.16f',integral(1)),sprintf('%2.16f',integral(2)),... sprintf('%2.16f',integral(3)),sprintf('%2.16f',integral(4)),... sprintf('%2.16f',integral(5)),sprintf('%2.16f',integral(6)),... sprintf('%2.16f',integral(7)),sprintf('%2.16f',integral(8)),... sprintf('%2.16f',integral(9)),sprintf('%2.16f',integral(10))); outputstr2=str2mat(sprintf('%2.16f',error(1)),sprintf('%2.16f',error(2)),... sprintf('%2.16f',error(3)),sprintf('%2.16f',error(4)),... sprintf('%2.16f',error(5)),sprintf('%2.16f',error(6)),... sprintf('%2.16f',error(7)),sprintf('%2.16f',error(8)),... sprintf('%2.16f',error(9)),sprintf('%2.16f',error(10))); outputstr3=str2mat(sprintf('%4.0f',sub(1)),sprintf('%4.0f',sub(2)),... sprintf('%4.0f',sub(3)),sprintf('%4.0f',sub(4)),... sprintf('%4.0f',sub(5)),sprintf('%4.0f',sub(6)),... sprintf('%4.0f',sub(7)),sprintf('%4.0f',sub(8)),... sprintf('%4.0f',sub(9)),sprintf('%4.0f',sub(10))); outputstr4=str2mat([],sprintf('%1.8f',ratio(2)),... sprintf('%1.8f',ratio(3)),sprintf('%1.8f',ratio(4)),... sprintf('%1.8f',ratio(5)),sprintf('%1.8f',ratio(6)),... sprintf('%1.8f',ratio(7)),sprintf('%1.8f',ratio(8)),... sprintf('%1.8f',ratio(9)),sprintf('%1.8f',ratio(10))); outputstr5=str2mat([],sprintf('%2.16f',integraldiff(2)),... sprintf('%2.16f',integraldiff(3)),sprintf('%2.16f',integraldiff(4)),... sprintf('%2.16f',integraldiff(5)),sprintf('%2.16f',integraldiff(6)),... sprintf('%2.16f',integraldiff(7)),sprintf('%2.16f',integraldiff(8)),... sprintf('%2.16f',integraldiff(9)),sprintf('%2.16f',integraldiff(10))); outputstr6=str2mat([],[],... sprintf('%2.16f',integralratio(3)),sprintf('%2.16f',integralratio(4)),... sprintf('%2.16f',integralratio(5)),sprintf('%2.16f',integralratio(6)),... sprintf('%2.16f',integralratio(7)),sprintf('%2.16f',integralratio(8)),... sprintf('%2.16f',integralratio(9)),sprintf('%2.16f',integralratio(10))); outputstr7=str2mat(sprintf('%2.16f',asymerror(1)),sprintf('%2.16f',asymerror(2)),... sprintf('%2.16f',asymerror(3)),sprintf('%2.16f',asymerror(4)),... sprintf('%2.16f',asymerror(5)),sprintf('%2.16f',asymerror(6)),... sprintf('%2.16f',asymerror(7)),sprintf('%2.16f',asymerror(8)),... sprintf('%2.16f',asymerror(9)),sprintf('%2.16f',asymerror(10))); set(textHndl,'String',outputstr); set(textHndl2,'String',outputstr2); set(textHndl3,'String',outputstr3); set(textHndl4,'String',outputstr4); set(textHndl5,'String',outputstr5); set(textHndl6,'String',outputstr6); set(textHndl7,'String',outputstr7); hndlList(3)=textHndl3; hndlList(12)=textHndl5; hndlList(13)=textHndl6; hndlList(14)=textHndl7; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function integrationhelp figNumber=figure( ... 'Name','Help for Numerical Integration program', ... 'units','normalized',... 'Color', [1 1 1], ... 'pos',[.4 .4 .5 .5],... 'NumberTitle','off', ... 'Visible','on'); %function explanations----------------------------- left=.01; bottom=.8; width=.9; height=.12; pos = [left bottom width height]; string = 'Subdivisions = k*2^n, where k is the value of Subdiv. and n goes from 1 to 10.'; h = uicontrol('Style','Text','Units','normalized','BackgroundColor', [1 1 1],'Position',pos,'String',string); pos = [left bottom-.15 width height]; string = {'Constant c is used in the functions 1/[d+sin(cx)] and e^(-cx) * cos(x).'}; h = uicontrol('Style','Text','Units','normalized','BackgroundColor', [1 1 1],'Position',pos,'String',string); pos = [left bottom-.3 width height]; string = {'Constant d is used in the function 1/[d+sin(cx)]'}; h = uicontrol('Style','Text','Units','normalized','BackgroundColor', [1 1 1],'Position',pos,'String',string); pos = [left bottom-.45 width height]; string = {'To execute the integration, select all the parameters and click on either Midpoint, Trapezoid, or Simpson''s '}; h = uicontrol('Style','Text','Units','normalized','BackgroundColor', [1 1 1],'Position',pos,'String',string); pos = [left bottom-.74 .45 .05]; string = {'Program by Rob O''Connell, 2001'}; h = uicontrol('Style','Text','Units','normalized','Position',pos,'String',string); %Close Button--------------------------------------- labelStr='Close'; callbackStr='close(gcf)'; closeHndl=uicontrol( ... 'Style','push', ... 'Units','normalized', ... 'position',[.82 .05 .15 .08], ... 'string',labelStr, ... 'call',callbackStr); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function moreresults(sub,integraldiff,integralratio,asymerror,rule) figNumber=figure( ... 'Name','More Results:', ... 'units','normalized',... 'Color', [.5 .5 .5], ... 'pos',[.01 .4 .8 .4],... 'NumberTitle','off', ... 'Visible','on'); %output fields --------------------------- left=.01; bottom=.15; width=.98; height=.75; textstr=str2mat(' ',' % This program determines integrals', ... ' % by various methods.'); framepos=[left bottom width height]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'HorizontalAlignment','center', ... 'Position',framepos, ... 'BackgroundColor',[0.7 0.7 0.7], ... 'ForegroundColor',[0 0 0], ... 'String',' Subdiv: Difference Between Successive Values: Ratio of the Differences: Asymptotic Error: '); textHndl=uicontrol( ... 'Style','text', ... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',[left+.1 bottom+.05 width-.7 height-.12], ... 'Callback','simprule', ... 'String',textstr); textHndl2=uicontrol( ... 'Style','text', ... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',[left+.39 bottom+.05 width-.7 height-.12], ... 'Callback','simprule', ... 'String',''); textHndl3=uicontrol( ... 'Style','text', ... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',[left+.02 bottom+.05 width-.91 height-.12], ... 'Callback','simprule', ... 'String',''); textHndl4=uicontrol( ... 'Style','text', ... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',[left+.68 bottom+.05 width-.7 height-.12], ... 'Callback','simprule', ... 'String',''); textHndl8=uicontrol( ... 'Style','text', ... 'HorizontalAlignment','center', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[.8 .8 .8], ... 'Position',[.4 .91 .2 .06], ... 'Callback','simprule', ... 'String',''); %Close Button--------------------------------------- labelStr='Close Window'; callbackStr='close(gcf)'; closeHndl=uicontrol( ... 'Style','push', ... 'Units','normalized', ... 'position',[.03 .05 .94 .08], ... 'string',labelStr, ... 'call',callbackStr); %Output---------------------------------------------------------------- set(textHndl3,'String',sub); set(textHndl4,'String',asymerror); set(textHndl,'String',integraldiff); set(textHndl2,'String',integralratio); set(textHndl8,'String',rule); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [integral,error,sub,ratio,integraldiff,integralratio,asymerror] = trap(fcn,a,b,n,c,d,integraldiff,integralratio,asymerror) integral=zeros(1,10); error=zeros(1,10); sub=zeros(1,10); ratio=zeros(1,10); ratio(1)=1; if strcmp(fcn,'power') %trap for powers----------------------------------------------- for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; t=a:h:b; sumend=(1/2)*(feval(fcn,a,c) +feval(fcn,b,c)); sum=0; for i=2:1:subdiv sum=sum+feval(fcn,t(i),c); end integral(k)=h*(sumend + sum); if c==-1 if a==0 differ=0; else differ=log(abs(b))-log(abs(a)); end else differ=(power(b,c+1))/(c+1)-(power(a,c+1))/(c+1); end sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end elseif strcmp(fcn,'cosdiv') %trap ----------------------------------------------- for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; t=a:h:b; c=1; sumend=(1/2)*(feval(fcn,a,c,d) +feval(fcn,b,c,d)); sum=0; for i=2:1:subdiv sum=sum+feval(fcn,t(i),c,d); end integral(k)=h*(sumend + sum); %----------------------------------------------------------------------------- twopiinterval=2*(atan(((tan(.5*pi*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1)))-... 2*(atan(((tan(.5*(-pi)*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1))); const=0; tempb=b; while abs(tempb) > abs(pi/c) tempb=sign(tempb)*(abs(tempb)-abs(2*pi/c)); const=const+1; end differ=2*(atan(((tan(.5*tempb*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1))); if b>0 differ=differ+const*twopiinterval; else differ=differ-const*twopiinterval; end const=0; tempa=a; while abs(tempa) > abs(pi/c) tempa=sign(tempa)*(abs(tempa)-abs(2*pi/c)); const=const+1; end if a>0 differ=differ-2*(atan(((tan(.5*tempa*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1)))-const*twopiinterval; else differ=differ-2*(atan(((tan(.5*tempa*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1)))+const*twopiinterval; end %-------------------------------------------------- sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end elseif strcmp(fcn,'ecos') %trap ----------------------------------------------- for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; t=a:h:b; sumend=(1/2)*(feval(fcn,a,c) +feval(fcn,b,c)); sum=0; for i=2:1:subdiv sum=sum+feval(fcn,t(i),c); end integral(k)=h*(sumend + sum); differ=-(exp(-(b*c))*c*cos(b) - exp(-(b*c))*sin(b) - c)/((c^2)+1)+... (exp(-(a*c))*c*cos(a) - exp(-(a*c))*sin(a) - c)/((c^2)+1); sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end else %trap for sin, cos, exp xminpi ecos4--------------------------------------------- for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; t=a:h:b; sumend=(1/2)*(feval(fcn,a) +feval(fcn,b)); sum=0; for i=2:1:subdiv sum=sum+feval(fcn,t(i)); end integral(k)=h*(sumend + sum); if strcmp(fcn,'sin') differ = -cos(b) + cos(a); elseif strcmp(fcn,'cos') differ = sin(b) - sin(a); elseif strcmp(fcn,'exp') differ = exp(b) - exp(a); elseif strcmp(fcn,'xminpi') differ = atan(b-pi) + atan(pi) -(atan(a-pi) + atan(pi)); elseif strcmp(fcn,'ecos4') differ = (1/17)*(exp(b)*cos(4*b)+4*exp(b)*sin(4*b)-1) - ... (1/17)*(exp(a)*cos(4*a)+4*exp(a)*sin(4*a)-1); end sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end end %more results --------------------------------------------------------------------------- integraldiff(2:10)=integral(2:10)-integral(1:9); integralratio(3:10) = integraldiff(2:9)./integraldiff(3:10); %asym error------------------------------------------- if strcmp(fcn,'sin') asymderiv=cos(b)-cos(a); elseif strcmp(fcn,'cos') asymderiv=sin(a)-sin(b); elseif strcmp(fcn,'exp') asymderiv=exp(b)-exp(a); elseif strcmp(fcn,'power') asymderiv=power(b,c-1)*(c)-power(a,c-1)*(c); elseif strcmp(fcn,'cosdiv') asymderiv=-(d+sin(c*b))^(-2)*(c*cos(c*b))+(d+sin(c*a))^(-2)*(c*cos(c*a)); elseif strcmp(fcn,'ecos') asymderiv=((-c)*exp((-c)*b)*cos(b)-exp((-c)*b)*sin(b))-((-c)*exp((-c)*a)*cos(a)-exp((-c)*a)*sin(a)); elseif strcmp(fcn,'ecos4') asymderiv=(exp(b)*cos(4*b)-4*exp(b)*sin(4*b))-(exp(a)*cos(4*a)-4*exp(a)*sin(4*a)); elseif strcmp(fcn,'xminpi') asymderiv=((-1)*((1+b*b-2*b*pi+pi*pi)^(-2))*(2*b-2*pi))-((-1)*((1+a*a-2*a*pi+pi*pi)^(-2))*(2*a-2*pi)); end for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; asymerror(k)=-((h*h)/12)*asymderiv; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [integral,error,sub,ratio,integraldiff,integralratio,asymerror] = midp(fcn,a,b,n,c,d,integraldiff,integralratio,asymerror) integral=zeros(1,10); error=zeros(1,10); sub=zeros(1,10); ratio=zeros(1,10); ratio(1)=1; ratio(2)=1; h=(b-a)/n; if strcmp(fcn,'power') %midp for powers----------------------------------------------- for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; t=a:h:b; sum=0; for i=1:1:subdiv sum=sum+feval(fcn,t(i)+(h/2),c); end integral(k)=h * sum; if c==-1 if a==0 differ=0; else differ=log(abs(b))-log(abs(a)); end else differ=(power(b,c+1))/(c+1)-(power(a,c+1))/(c+1); end sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end elseif strcmp(fcn,'cosdiv') %midp for cosdiv----------------------------------------------- for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; t=a:h:b; sum=0; c=1; for i=1:1:subdiv sum=sum+feval(fcn,t(i)+(h/2),c,d); end integral(k)=h * sum; %----------------------------------------------------------------------------- twopiinterval=2*(atan(((tan(.5*pi*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1)))-... 2*(atan(((tan(.5*(-pi)*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1))); const=0; tempb=b; while abs(tempb) > abs(pi/c) tempb=sign(tempb)*(abs(tempb)-(abs((2*pi)/c))); const=const+1; end differ=2*(atan(((tan(.5*tempb*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1))); if b>0 differ=differ+const*twopiinterval; else differ=differ-const*twopiinterval; end const=0; tempa=a; while abs(tempa) > abs(pi/c) tempa=sign(tempa)*(abs(tempa)-(abs((2*pi)/c))); const=const+1; end if a>0 differ=differ-2*(atan(((tan(.5*tempa*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1)))-const*twopiinterval; else differ=differ-2*(atan(((tan(.5*tempa*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1)))+const*twopiinterval; end %-------------------------------------------------- sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end elseif strcmp(fcn,'ecos') %midp for cosdiv----------------------------------------------- for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; t=a:h:b; sum=0; for i=1:1:subdiv sum=sum+feval(fcn,t(i)+(h/2),c); end integral(k)=h * sum; differ=-(exp(-(b*c))*c*cos(b) - exp(-(b*c))*sin(b) - c)/((c^2)+1)+... (exp(-(a*c))*c*cos(a) - exp(-(a*c))*sin(a) - c)/((c^2)+1); sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end %midp for sin, cos, exp--------------------------------------------- else for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; t=a:h:b; sum=0; for i=1:1:subdiv sum=sum+feval(fcn,t(i)+(h/2)); end integral(k)=h * sum; if strcmp(fcn,'sin') differ = -cos(b) + cos(a); elseif strcmp(fcn,'cos') differ = sin(b) - sin(a); elseif strcmp(fcn,'exp') differ = exp(b) - exp(a); elseif strcmp(fcn,'xminpi') differ = atan(b-pi) + atan(pi) -(atan(a-pi) + atan(pi)); elseif strcmp(fcn,'ecos4') differ = (1/17)*(exp(b)*cos(4*b)+4*exp(b)*sin(4*b)-1) - ... (1/17)*(exp(a)*cos(4*a)+4*exp(a)*sin(4*a)-1); end sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end end %more results --------------------------------------------------------------------------- integraldiff(2:10)=integral(2:10)-integral(1:9); integralratio(3:10) = integraldiff(2:9)./integraldiff(3:10); %asym error------------------------------------------- if strcmp(fcn,'sin') asymderiv=cos(b)-cos(a); elseif strcmp(fcn,'cos') asymderiv=sin(a)-sin(b); elseif strcmp(fcn,'exp') asymderiv=exp(b)-exp(a); elseif strcmp(fcn,'power') asymderiv=power(b,c-1)*(c)-power(a,c-1)*(c); elseif strcmp(fcn,'cosdiv') asymderiv=-(d+sin(c*b))^(-2)*(c*cos(c*b))+(d+sin(c*a))^(-2)*(c*cos(c*a)); elseif strcmp(fcn,'ecos') asymderiv=((-c)*exp((-c)*b)*cos(b)-exp((-c)*b)*sin(b))-((-c)*exp((-c)*a)*cos(a)-exp((-c)*a)*sin(a)); elseif strcmp(fcn,'ecos4') asymderiv=(exp(b)*cos(4*b)-4*exp(b)*sin(4*b))-(exp(a)*cos(4*a)-4*exp(a)*sin(4*a)); elseif strcmp(fcn,'xminpi') asymderiv=((-1)*((1+b*b-2*b*pi+pi*pi)^(-2))*(2*b-2*pi))-((-1)*((1+a*a-2*a*pi+pi*pi)^(-2))*(2*a-2*pi)); end for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; asymerror(k)=((h*h)/24)*asymderiv; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [integral,error,sub,ratio,integraldiff,integralratio,asymerror] = simprule(fcn,a,b,n,c,d,integraldiff,integralratio,asymerror) integral=zeros(1,10); error=zeros(1,10); sub=zeros(1,10); ratio=zeros(1,10); ratio(1)=1; h=(b-a)/n; if strcmp(fcn,'power') %for power function--------------------------------------- for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; t=a:h:b; sumend=feval(fcn,a,c) +feval(fcn,b,c); sumodd=0; for i=2:2:subdiv sumodd=sumodd+feval(fcn,t(i),c); end sumeven=0; for i=3:2:subdiv-1; sumeven=sumeven + feval(fcn,t(i),c); end integral(k)=(h/3)*(sumend + 4*sumodd + 2*sumeven); if c==-1 if a==0 differ=0; else differ=log(abs(b))-log(abs(a)); end else differ=(power(b,c+1))/(c+1)-(power(a,c+1))/(c+1); end sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end elseif strcmp(fcn,'cosdiv')%for 1/(d + cos cx)------------------------------------ for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; c=1; t=a:h:b; sumend=feval(fcn,a,c,d) +feval(fcn,b,c,d); sumodd=0; for i=2:2:subdiv sumodd=sumodd+feval(fcn,t(i),c,d); end sumeven=0; for i=3:2:subdiv-1; sumeven=sumeven + feval(fcn,t(i),c,d); end integral(k)=(h/3)*(sumend + 4*sumodd + 2*sumeven); %----------------------------------------------------------------------------- twopiinterval=2*(atan(((tan(.5*pi*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1)))-... 2*(atan(((tan(.5*(-pi)*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1))); const=0; tempb=b; while abs(tempb) > abs(pi/c) tempb=sign(tempb)*(abs(tempb)-abs(2*pi/c)); const=const+1; end differ=2*(atan(((tan(.5*tempb*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1))); if b>0 differ=differ+const*twopiinterval; else differ=differ-const*twopiinterval; end const=0; tempa=a; while abs(tempa) > abs(pi/c) tempa=sign(tempa)*(abs(tempa)-abs(2*pi/c)); const=const+1; end if a>0 differ=differ-2*(atan(((tan(.5*tempa*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1)))-const*twopiinterval; else differ=differ-2*(atan(((tan(.5*tempa*c)*d)+1)/(sqrt(d^2-1)))-atan(1/(sqrt(d^2-1))))/(c*(sqrt(d^2-1)))+const*twopiinterval; end %-------------------------------------------------- sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end elseif strcmp(fcn,'ecos')%for ecos------------------------------------------- for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; t=a:h:b; sumend=feval(fcn,a,c) +feval(fcn,b,c); sumodd=0; for i=2:2:subdiv sumodd=sumodd+feval(fcn,t(i),c); end sumeven=0; for i=3:2:subdiv-1; sumeven=sumeven + feval(fcn,t(i),c); end integral(k)=(h/3)*(sumend + 4*sumodd + 2*sumeven); differ=-(exp(-(b*c))*c*cos(b) - exp(-(b*c))*sin(b) - c)/((c^2)+1)+... (exp(-(a*c))*c*cos(a) - exp(-(a*c))*sin(a) - c)/((c^2)+1); sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end else %for sin, cos, exp xminpi ecos4--------------------------------------------- for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; t=a:h:b; sumend=feval(fcn,a) +feval(fcn,b); sumodd=0; for i=2:2:subdiv sumodd=sumodd+feval(fcn,t(i)); end sumeven=0; for i=3:2:subdiv-1; sumeven=sumeven + feval(fcn,t(i)); end integral(k)=(h/3)*(sumend + 4*sumodd + 2*sumeven); if strcmp(fcn,'sin') differ = -cos(b) + cos(a); elseif strcmp(fcn,'cos') differ = sin(b) - sin(a); elseif strcmp(fcn,'exp') differ = exp(b) - exp(a); elseif strcmp(fcn,'xminpi') differ = atan(b-pi) + atan(pi) -(atan(a-pi) + atan(pi)); elseif strcmp(fcn,'ecos4') differ = (1/17)*(exp(b)*cos(4*b)+4*exp(b)*sin(4*b)-1) - ... (1/17)*(exp(a)*cos(4*a)+4*exp(a)*sin(4*a)-1); end sub(k)=subdiv; error(k) = differ - integral(k); if k>1 if abs(error(k)) == 0 ratio(k)=1; else ratio(k)=error(k-1)/error(k); end end end end %more results --------------------------------------------------------------------------- integraldiff(2:10)=integral(2:10)-integral(1:9); integralratio(3:10) = integraldiff(2:9)./integraldiff(3:10); %asym error------------------------------------------- if strcmp(fcn,'sin') asymderiv=-cos(b)+cos(a); elseif strcmp(fcn,'cos') asymderiv=sin(b)-sin(a); elseif strcmp(fcn,'exp') asymderiv=exp(b)-exp(a); elseif strcmp(fcn,'power') asymderiv=power(b,c-3)*c*(c-1)*(c-2)-power(a,c-3)*c*(c-1)*(c-2); elseif strcmp(fcn,'cosdiv') asymderiv=-6/(d+sin(b))^4*cos(b)^3-6/(d+sin(b))^3*cos(b)*sin(b)+1/(d+sin(b))^2*cos(b)-... (-6/(d+sin(a))^4*cos(a)^3-6/(d+sin(a))^3*cos(a)*sin(a)+1/(d+sin(a))^2*cos(a)); elseif strcmp(fcn,'ecos') asymderiv=-c^3*exp(-c*b)*cos(b)-3*c^2*exp(-c*b)*sin(b)+3*c*exp(-c*b)*cos(b)+exp(-c*b)*sin(b)+... c^3*exp(-c*a)*cos(a)+3*c^2*exp(-c*a)*sin(a)-3*c*exp(-c*a)*cos(a)-exp(-c*a)*sin(a); elseif strcmp(fcn,'ecos4') asymderiv=-47*exp(b)*cos(4*b)+52*exp(b)*sin(4*b)+... 47*exp(a)*cos(4*a)+52*exp(a)*sin(4*a); elseif strcmp(fcn,'xminpi') asymderiv=-6/(1+(b-pi)^2)^4*(2*b-2*pi)^3+12/(1+(b-pi)^2)^3*(2*b-2*pi)+... 6/(1+(a-pi)^2)^4*(2*a-2*pi)^3-12/(1+(a-pi)^2)^3*(2*a-2*pi); end for k=1:10 subdiv=2^k*n; h=(b-a)/subdiv; asymerror(k)=-((h^4)/180)*asymderiv; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [value] = ecos(x,c) value = exp(-(c.*x)).*cos(x); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [value] = cosdiv(x,c,d) value = 1./(d + sin(c.*x)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [value] = ecos4(x) value = exp(x).*cos(4.*x); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [value] = xminpi(x) value = 1./(1+((x-pi).^2));