How to fastly compute a double integral of a self-defined function?

조회 수: 2 (최근 30일)
Tmat
Tmat 2020년 2월 26일
댓글: Tmat 2020년 2월 27일
Hi everyone,
I need to compute , where is my self-defined function, M is infinity and in actual calculation I set it to be a large number and is the probability density function of standard bivariate normal. My code for a simple example looks as follows (here ):
clear;
tic
step=0.01;
grid=-100:step:100; lg=length(grid);
x=repmat(grid',1,lg);
y=repmat(grid,lg,1);
tempz=[x(:) y(:)];
z=tempz(:,1).*tempz(:,2);
fz=mvnpdf(tempz);
t=sum(z.*fz);
toc
This simple example already takes me 30 seconds on a computing node of our university. In the real application is much more complex and defined by a separate function file. I'm wondering if there are any more efficient ways of doing this?

채택된 답변

Steven Lord
Steven Lord 2020년 2월 26일
Use the integral2 function.
  댓글 수: 5
Steven Lord
Steven Lord 2020년 2월 26일
fh = @(x, y) reshape(mvnpdf([x(:), y(:)]), size(x));
integral2(fh, -Inf, Inf, -Inf, Inf)
fh combines the two coordinate vectors integral2 will pass into it into the coordinate matrix mvnpdf requires, evaluates the PDF, and uses reshape to make the PDF values vector the same shape as the input.
Tmat
Tmat 2020년 2월 27일
Thanks a lot, Steven. This worked!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Discrete Fourier and Cosine Transforms에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by