How to use an integral inside another integral

I have the following code:
function [answer]=find_integral2(z)
F=@(y) find_integral(z-y).*find_integral(y);
answer= integral(F,-Inf,Inf);
end
function [answer]=find_integral(u)
F = @(x)normpdf(x).*normpdf(u./x);
answer= integral(F,-Inf,Inf);
end
When I call the function find_integral2(4), I get the following error:
Error using ./ Matrix dimensions must agree.
I know I can solve this with triple integral but I want to call find_integral2 several times, i.e. , I want to again use it in another function:
F=@(y) find_integral(z-y).*find_integral2(y);answer= integral(F,-Inf,Inf);
I would appreciate if you could help me fix this error. Thank you.

 Respuesta aceptada

Mike Hosea
Mike Hosea el 23 de Sept. de 2013
Either this (find_integral is unchanged)
function [answer]=find_integral2(z)
F=@(y) arrayfun(@(y)find_integral(z-y).*find_integral(y),y);
answer= integral(F,-Inf,Inf);
end
or this
function [answer]=find_integral2(z)
F=@(y) find_integral(z-y).*find_integral(y);
answer= integral(F,-Inf,Inf,'ArrayValued',true);
end

4 comentarios

may
may el 23 de Sept. de 2013
Editada: may el 23 de Sept. de 2013
Thanks a lot! It worked! Just a question, do you know any faster way to calculate integral with matlab? because I want to use find_integral2 recursively, and for the following function it took one hour to get the result!
function [answer]=find_integral3(z)
F=@(y) arrayfun(@(y)find_integral2(z-y).*find_integral(y),y);
answer= integral(F,-Inf,Inf);
end
Well, you could loosen the tolerances, say add the arguments
'AbsTol',1e-5,'RelTol',1e-3
to the integral calls.
That took about 110 seconds on my machine, which is admittedly a new workstation. For something completely different you might look into Monte Carlo or Smolyak methods. These iterated integrals just aren't that efficient as the dimension goes up. Nice set of slides here
may
may el 24 de Sept. de 2013
Thank you SO MUCH! using 'AbsTol',1e-5,'RelTol',1e-3, now it takes around 1 minute!
may
may el 27 de Sept. de 2013
Editada: may el 27 de Sept. de 2013
Thanks a lot for your help again. so now using 'AbsTol',1e-5,'RelTol',1e-3, I could speed up the function find_integral3(z) (mentioned above), but now I want to again use it to calculate the following integral (this is actually the final problem I want to solve)
F = @(y)find_integral3(z)(z-y).*find_integral3(y);
answer= integral(F,-Inf,Inf,'AbsTol',1e-5,'RelTol',1e-3);
Even after around 8 hours, it did not terminate! I would appreciate if you could help me again.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre MATLAB en Centro de ayuda y File Exchange.

Productos

Etiquetas

Preguntada:

may
el 19 de Sept. de 2013

Comentada:

may
el 27 de Sept. de 2013

Community Treasure Hunt

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

Start Hunting!

Translated by