Double integral with one integral having limits as a function of other variable
5 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
Teja Muppirala
2017-8-3
编辑:Teja Muppirala
2017-8-3
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 个)
Torsten
2017-8-3
Directly evaluate "A" and insert the expression in "fun_Z0":
There are several implementations of the Struve function, e.g.
https://de.mathworks.com/matlabcentral/fileexchange/37302-struve-functions
Best wishes
Torsten.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Particle & Nuclear Physics 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!