8.7 Int´ egrales singuli` eres
317
% La fonction inline Y = FUN(V) doit prendre en argument un vecteur V
% et renvoyer dans un vecteur Y l’int´ egrande ´ evalu´ e en chaque ´ el´ ement
% de X.
% JSF = SIMPADPT(FUN,A,B,TOL,HMIN,P1,P2,...) appelle la fonction FUN en
% passant les param` etre optionnels P1,P2,... par FUN(X,P1,P2,...).
A=[a,b]; N=[]; S=[]; JSf = 0; ba = b - a; nodes=[];
while ˜isempty(A),
[deltaI,ISc]=caldeltai(A,f,varargin{:});
if abs(deltaI) <= 15*tol*(A(2)-A(1))/ba;
JSf = JSf + ISc; S = union(S,A);
nodes = [nodes, A(1) (A(1)+A(2))*0.5 A(2)];
S = [S(1), S(end)]; A = N; N = [];
elseif A(2)-A(1) < hmin
JSf=JSf+ISc;
S = union(S,A);
S = [S(1), S(end)]; A=N; N=[];
warning(’Pas d’’int´ egration trop petit’);
else
Am = (A(1)+A(2))*0.5;
A = [A(1) Am];
N = [Am, b];
end
end
nodes=unique(nodes);
return
function [deltaI,ISc]=caldeltai(A,f,varargin)
L=A(2)-A(1);
t=[0; 0.25; 0.5; 0.5; 0.75; 1];
x=L*t+A(1);
L=L/6;
w=[1; 4; 1];
fx=feval(f,x,varargin{:}).*ones(6,1);
IS=L*sum(fx([1 3 6]).*w);
ISc=0.5*L*sum(fx.*[w;w]);
deltaI=IS-ISc;
return
8.7 Int´ egrales singuli` eres
Dans cette section, nous ´ etendons notre analyse aux cas o` u la fonction f ` a
int´ egrer pr´ esente un saut, fini ou infini, en un point. Nous pr´ esentons aussi
bri` evement les m´ ethodes num´ eriques les mieux adapt´ ees pour calculer les int´ egrales des fonctions born´ ees sur des intervalles non born´ es.
Précédent

- 325/540

Suivant