MATLABを使用して、自然指数を含む複雑な関数の数値積分を計算しています。積分または四重積分を使用した数値積分の計算
は私が警告を受ける:
無限または非数値遭遇
別のエラーがスローされている間、私は、機能integral
を使用する場合:
関数出力をは、入力と同じサイズでなければなりません。
quadgk
を使用すると、
が返されます。
変数ep
がゼロに近いとき、被積分関数は無限である可能性があります。
コードは次のとおりです。あなたが私にそれを理解させるのを助けてくれることを願っています。
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
私は[ 'integral'はちょうど見つけやすいとのバージョンを使用する方が簡単である」ことを指摘したい側の注意点として、あります'quadgk'。](https://blogs.mathworks.com/cleve/2016/05/23/modernization-of-numerical-integration-from-quad-to-integral)" – TroyHaskin