Efficient way to compute a double integral within a double integral

4 visualizzazioni (ultimi 30 giorni)
Hi all,
I would like to know what is the easiest and most efficient way to solve the integration shown in the figure attached.integration.JPG
I tried the following code, but it doesn't work:
R1 = @(x1,x2) integral2(@(x3,x4) fun_g(x1,x2,x3,x4),l3,u3,l4,u4);
R = integral2(R1.*@fun_f,l1,u1,l2,u2);
function f = fun_f(x1,x2)
% here we define f function (it is a rather complex function)
end
function g = fun_g(x1,x2,x3,x4)
% here we define g function (it is a rather complex function)
end
Thanks in advance!

Risposta accettata

Torsten
Torsten il 7 Giu 2019
Modificato: Torsten il 7 Giu 2019
function main
l1 = ...;
u1 = ...;
l2 = ...;
u2 = ...;
value_outer_integral = integral2(@fun,l1,u1,l2,u2)
end
function value_inner_integral = fun(x1,x2)
l3 = ...;
u3 = ...;
l4 = ...;
u4 = ...;
for i = 1:numel(x1)
value_inner_integral(i) = fun_f(x1(i),x2(i))*integral2(@(x3,x4)driver_fun_g(x1(i),x2(i),x3,x4),l3,u3,l4,u4);
end
end
function g = driver_fun_g(x1,x2,x3,x4)
for i = 1:numel(x3)
g(i) = fun_g(x1,x2,x3(i),x4(i));
end
end
function f = fun_f(x1,x2)
% return f(x1,x2) for scalar values of x1 and x2
end
function g = fun_g(x1,x2,x3,x4)
% return g(x1,x2,x3,x4) for scalar values of x1, x2, x3 and x4
end
  2 Commenti
Igor Dakic
Igor Dakic il 8 Giu 2019
Thanks! Is it possible to avoid loops and vectorize parts for value_inner_integral(i) and g(i)?
Torsten
Torsten il 11 Giu 2019
For "value_inner_integral", the answer is no.
For "driver_fun_g": If you can evaluate g for arrays of x1, x2 x3 and y4, the answer is yes.

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by