diff --git a/functions/integratore_adattivo_locale.m b/functions/integratore_adattivo_locale.m index b5b9d5c..2e1266b 100644 --- a/functions/integratore_adattivo_locale.m +++ b/functions/integratore_adattivo_locale.m @@ -12,28 +12,33 @@ function [ area, err, ier ] = integratore_adattivo_locale( f, m, toll , maxite ) % area = area finale % err = errore assoluto % ier = indice di errore - + +minlen_factor=1e-6; [x,~] = size(m); i=1; k=i+1; j=x; +minlen=(m(j,1) - m(i,1)) * minlen_factor ; ite = 0; area=0; err = 0; ier = 0; - while (i <= j - 1) && (ite < maxite) + while (i <= j - 1) && (ite < maxite) &&( (m(j,1) - m(i,1)) > minlen ) ltoll = (toll * (m(k,1) - m(i,1))) / (m(j,1) - m(i,1)); [~,larea,lerr,m1] = static_quadratic(f,m(i:k,:)); m=[m(1:i-1,:);m1;m(k+1:j,:)]; ite = ite + 1; j= j + 1; - while (lerr > ltoll) && (ite < maxite) + while (lerr > ltoll) && (ite < maxite) &&( (m(j,1) - m(i,1)) > minlen ) ltoll = (toll * (m(k,1) - m(i,1))) / (m(j,1) - m(i,1)); [~,larea,lerr,m1] = static_quadratic(f,m(i:k,:)); m=[m(1:i-1,:);m1;m(k+1:j,:)]; ite = ite + 1; j= j + 1; end + if (m(j,1) - m(i,1)) <= minlen + disp('Warning: Minlen raggiunto') + end area = area + larea; err = err + lerr;