J'utilise MATLAB pour calculer l'intégrale numérique d'une fonction complexe incluant l'exposant naturel.Calcul de l'intégrale numérique à l'aide de l'intégrale ou du quadgk
Je reçois un avertissement:
valeur infinie ou non un nombre rencontré
si j'utilise la fonction integral
, tandis qu'une autre erreur est levée:
sortie de la fonction doit avoir la même taille que l'entrée
si j'utilise la fonction quadgk
.
Je pense que la raison pourrait être que l'intégrande est infinie lorsque la variable ep
est proche de zéro.
Code illustré ci-dessous. J'espère que vous pouvez m'aider à comprendre.
close all
clear
clc
%%
N = 10^5;
edot = 10^8;
yita = N/edot;
kB = 8.6173324*10^(-5);
T = 300;
gamainf = 0.115;
dTol = 3;
K0 = 180;
K = K0/160.21766208;
nu = 3*10^12;
i = 1;
data = [];
%% lambda = ec/ef < 1
for ef = 0.01:0.01:0.1
for lambda = 0.01:0.01:0.08
ec = lambda*ef;
f = @(ep) exp(-((32/3)*pi*gamainf^3*(0.5+0.5*sqrt(1+2*dTol*K*(ep-ec)/gamainf)-dTol*K*(ep-ec)/gamainf).^3/(K*(ep-ec)).^2-16*pi*gamainf^3*(0.5+0.5*sqrt(1+2*dTol*K*(ep-ec)/gamainf)-dTol*K*(ep-ec)/gamainf).^2/((1+dTol*K*(ep-ec)/(gamainf*(0.5+0.5*sqrt(1+2*dTol*K*(ep-ec)/gamainf)-dTol*K*(ep-ec)/gamainf)))*(K*(ep-ec)).^2))/(kB*T));
q = integral(f,0,ef,'ArrayValued',true);
% q = quadgk(f,0,ef);
prob = 1-exp(-yita*nu*q);
data(i,1) = ef;
data(i,2) = lambda;
data(i,3) = q;
i = i+1;
end
end
Comme une note de côté, je voudrais souligner que « [' integral' est juste un moyen plus facile de trouver et plus facile à utiliser la version de 'quadgk'.] (https://blogs.mathworks.com/cleve/2016/05/23/modernization-of-numerical-integration-from-quad-to-integral)" – TroyHaskin