Double integral with one integral having limits as a function of other variable

6 visualizzazioni (ultimi 30 giorni)
Dear all, I have the problem below:
l1=3e-3;
l2=4e-3;
r1=11e-3;
r2=12e-3;
fun_Z0=@(x) x^(-5)* A^2 *((l2-l1)+(exp(-x*(l2-l1))-1)*x^(-1));
where
A=integral(y*besselj(1,y), x*r1, x*r2)
I would like to calculate
Z=integral(fun_Z0, 0, Inf)
Could you please suggest a function that could handle this problem?
Thanks

Risposta accettata

Teja Muppirala
Teja Muppirala il 3 Ago 2017
Modificato: Teja Muppirala il 3 Ago 2017
You can put functions inside of functions
%%Embed A into fun_Z0, and tell INTEGRAL to only accept scalar inputs
l1=3e-3;
l2=4e-3;
r1=11e-3;
r2=12e-3;
A=@(z) integral(@(y) y.*besselj(1,y), z*r1, z*r2)
fun_Z0=@(x) x^(-5)* A(x)^2 *((l2-l1)+(exp(-x*(l2-l1))-1)*x^(-1));
% This seems to be a hard integral. You'll get some warnings here, but it works
Z=integral(fun_Z0, 0, Inf, 'ArrayValued', true,'AbsTol',0)
Z =
6.0922e-15
%%If you really want to make sure, break it up into pieces
intValue = 0;
tol = 1e-6;
for n = 0:100
prevValue = intValue;
Z=integral(fun_Z0, 5000*n, 5000*(n+1), 'ArrayValued', true,'AbsTol',0);
intValue = intValue + Z;
if abs(1 - intValue/prevValue) < tol
break
end
end
intValue
intValue =
6.0922e-15
  1 Commento
Shan  Chu
Shan Chu il 3 Ago 2017
Thank you so much sir, It is what I am looking for. I didn't know it is possible to put functions inside functions.

Accedi per commentare.

Più risposte (1)

Torsten
Torsten il 3 Ago 2017

Community Treasure Hunt

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

Start Hunting!

Translated by