# 4D integration numerical evaluation

11 views (last 30 days)

Show older comments

Hi

I am trying to numerically evaluate a 4D integral of the form:

\int\int\int\int K(x,y,t,s)h_m(x)h_n(y)h_p(t)h_q(s)dxdydtds, limits of integral is 0 to 1.

where h is a function of single variable.

thanks

##### 1 Comment

Star Strider
on 12 Feb 2015

See the documentation for integral. Depending on your version of MATLAB, you may need to search for the correct function. In previous versions, the quad function and its friends did numerical integration of functions.

You will need to iterate your integration four times, once for each variable.

Another option is trapz if you have already evaluated your function over a 4D grid and you want to use trapezoidal integration. You will have to integrate it over each dimension, so four times for it as well.

### Accepted Answer

Mike Hosea
on 13 Feb 2015

Well, you can try integralN from the file exchange. I wrote that little ditty just so I wouldn't have to keep explaining the nuances of how to nest calls to integral functions. The call would look like

integralN(@(x,y,t,s)K(x,y,t,s).*h_m(x).*h_n(y).*h_p(t).*h_q(s),0,1,0,1,0,1,0,1);

But you might gain some advantage here by nesting the calls yourself, since you can factor out a couple of functions easily.

inners = @(x,y)h_m(x).*h_n(y).*integral2(@(t,s)K(x*ones(size(t),y*ones(size(t),t,s).*h_p(t).*h_q(s),0,1,0,1);

inner = @(x,y)arrayfun(inners,x,y);

Q = integral2(inner,0,1,0,1);

I don't have time to test that right now. Give it a try. Note that I'm assuming K, h_p and h_q can be called with array inputs so that they compute array outputs, the function values computed element-wise. Usually this means using .* instead of *, ./ instead of /, and .^ instead of ^, but it isn't always quite that simple.

##### 4 Comments

TheStranger
on 17 Jan 2023

### More Answers (0)

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!