How to calculate a double integral inside the domain of intersection of two functions?

9 ビュー (過去 30 日間)
Mehdi
Mehdi 2023 年 1 月 16 日
編集済み: Torsten 2023 年 1 月 25 日
I want to calculate a double integral of an arbitrary function (f) inside the region of intersection of two other functions. Please suggest a fast and convenient approach.
clear
JJ = 5;
II = 5;
W = rand(II, JJ);
syms x y
w = sym('0');
f = sym('0');
for i=1:II
for j=1:JJ
w =w+W(i, j)*legendreP(i-1, x)*legendreP(j-1, y);
f =f+(legendreP(i-1, x)*legendreP(j-1, y))^2;
end
end
H = 0.5*(1+tanh(w));
fsurf(w,[-1,1,-1,1],'red')
hold on
% figure
fsurf(H,[-1,1,-1,1],'blue')
%F = double integral of f inside the domain of intersection of two functions as
%the region showed in pic
  13 件のコメント
Mehdi
Mehdi 2023 年 1 月 18 日
Any suggestion to speed up the calculation?
clc
clear
JJ = 9;
II = 9;
W = 01*rand(II, JJ);
syms x y
w = sym('0');
f = sym('0');
for i=1:II
for j=1:JJ
w =w+W(i, j)*legendreP(i-1, x)*legendreP(j-1, y);
f =f+(legendreP(i-1, x)*legendreP(j-1, y))^2;
end
end
H = 0.5*(1+tanh(11*w));
f = matlabFunction(f,'Vars',[x y]);
g = matlabFunction(H-0.5,'Vars',[x y]);
D = @(x,y)f(x,y).*(g(x,y)>0);
Dint = integral2(D,-1,1,-1,1)
Torsten
Torsten 2023 年 1 月 18 日
編集済み: Torsten 2023 年 1 月 18 日
Any suggestion to speed up the calculation?
No. I remember we had this integration problem before. And the region where g(x,y)>0 is quite complicated.

サインインしてコメントする。

回答 (1 件)

Bjorn Gustavsson
Bjorn Gustavsson 2023 年 1 月 17 日
編集済み: Bjorn Gustavsson 2023 年 1 月 17 日
Perhaps you can use Green's theorem (you'd be very lucky if you could - but if you were to be that lucky in this case it would be a shame to miss it). That would take you from a sum of integrals over rather complicated regions to perhaps simpler integrals around the boundaries of the region. That would be nice. Given the shape of your function it doesn't seem entirely improbable.
For the case where you actually have to perform the calculations you would use the steps suggested in @Torsten's comment.
HTH
  5 件のコメント
Mehdi
Mehdi 2023 年 1 月 25 日
編集済み: Mehdi 2023 年 1 月 25 日
C can be found by FEX submission availiable through https://www.mathworks.com/matlabcentral/fileexchange/74010-getcontourlinecoordinates?s_tid=srchtitle. The problem for me is to find M and L (a,b). Any suggestions?
Torsten
Torsten 2023 年 1 月 25 日
編集済み: Torsten 2023 年 1 月 25 日
a = b = 0.
You can use any function M with dM/dx = f.
But you need a symbolic integration here.
I doubt the whole process will be faster than using integral2 directly, apart from the problems of evaluating the curve integral.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by