Error encountered for numerical integration inside for loop.

1 次查看(过去 30 天)
So this is the code I'm trying to run -
q=10e8:10000:20e9;
s=length(q);
epso = 8.8 *10.^-12;
epsr=5.7;
ro=3.63*(10.^-3);
epsl = 2.5;
ri=1.13*(10.^-3);
copen = (epso/sqrt(epsr)*log(ro/ri));
cload= (epsl/sqrt(epsr)*log(ro/ri));
t = zeros(1,s);
for f = 1:length(q)
fun = @(x)(((((besselj(0,(2*pi*q(f))/(3e8))*x*ro)-besselj(0,(2*pi*q(f))/(3e8))*x*ri)).^2)./x).*freload(x,q)));
y(f) = copen*abs(integral(fun,0,Inf));
t(f)=(1-y(f))/(1+y(f));
end
plot (q,t);
where the function freload is
function f = freload(x,q)
epsl=3.4;
f=(1./sqrt(epsl-(x.^2))).*(1+exp(-2*1i*2*pi*q./(3e8).*sqrt(epsl-(x.^2))))./((1-exp(-2*1i*2*pi*q/(3e8).*sqrt(epsl-(x.^2)))));
end
The errors I get are as follows -
Error using integralCalc/finalInputChecks (line 515)
Output of the function must be the same size as the input. If FUN is an array-valued integrand, set the
'ArrayValued' option to true.
Error in integralCalc/iterateScalarValued (line 315)
finalInputChecks(x,fx);
Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
Error in integralCalc (line 83)
[q,errbnd] = vadapt(@AToInfInvTransform,interval);
Error in integral (line 88)
Q = integralCalc(fun,a,b,opstruct);
Error in numint (line 14)
y(f) = copen*abs(integral(fun,0,Inf));
The program seems to be giving an output for other functions. Any help would be appreciated greatly.

采纳的回答

Walter Roberson
Walter Roberson 2017-9-12
Your line
fun = @(x)(((((besselj(0,(2*pi*q(f))/(3e8))*x*ro)-besselj(0,(2*pi*q(f))/(3e8))*x*ri)).^2)./x).*freload(x,q)));
calls freload() passing in all of q, instead of q(f)

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Computations 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by