MATLAB Answers


How to find double integral in MATLAB

Asked by may
on 16 Sep 2013

Given mean1, mean2, sigma1,sigma2, and u, I want to find the following integral:

for example: mean1=0, mean2=0, sigma1=0.2, sigma2=1, and u=0.4

F = @(x,y)normpdf(x, mean1, sigma1).*normpdf(y, mean2, sigma2).*dirac(x*y-u);
answer= integral2(F,-Inf,Inf,-Inf,Inf);

but I get the following error

|Error using integralCalc/finalInputChecks (line 511) Input function must return 'double' or 'single' values. Found 'function_handle'.|

I would appreciate if you could help me to fix my code. Thank you.


Thanks for your help. I think another way is to approximate the distribution of X*Y by producing some random numbers from the distribution of X and Y then multiply them all together and find its histogram.

If you define a true function you can use conditional logic for it.

function r = F(x)
  r = zeros(size(x));
  r(x==0) = whatever it should be;
  nzx = x(x ~=0);
  r(x~=0) = normpdf(nxz, mean1, sigma1).*normpdf(u./nzx, mean2, sigma2).*(1./abs(nzx);

Nice answer! Thank a lot!

2 Answers

Answer by Sean de Wolski
on 16 Sep 2013

Running your example I get an error saying the matrix dimensions must agree. Changing the x*y to x.*y inside of dirac allows it to run and returns an answer of zero

F = @(x,y)normpdf(x, mean1, sigma1).*normpdf(y, mean2, sigma2).*dirac(x.*y-u);
answer= integral2(F,-Inf,Inf,-Inf,Inf);

  1 Comment

thank you, but now I get zero for all the inputs i am trying.

Answer by Walter Roberson
on 16 Sep 2013

Which dirac are you using? It appears you might be using dirac from the Symbolic toolbox, You should experiment with

class(dirac(5))   %for example

You might need something like double(dirac(x*y-u)) in your code instead of a plan dirac() call.

  1 Comment

You should be using symbolic integration instead of numeric integration. symbolic integration is int() in the Symbolic Toolbox

Join the 15-year community celebration.

Play games and win prizes!

Learn more
Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!