# I need to determine the no. of loops and area under each loop from the xy plot.

1 view (last 30 days)
Sahil Wani on 13 Nov 2023
Commented: Mathieu NOE on 11 Dec 2023
I have the x and y data. I need to calclulate total no. loops formed and area under each loop. For the refference I am attaching the figure and x.mat and y.mat files
:
Dyuman Joshi on 13 Nov 2023
How do you define a loop in the given figure?
Sahil Wani on 13 Nov 2023
Area enclosed as shown in fig:

Mathieu NOE on 13 Nov 2023
hello
with the help of this FEX submission, it was quite simple :
the loops are shown in color on top of your data plot
the self intersect points are shown as red diamonds markers
result is :
area = 71.3220 125.0467 132.8896
units are unknown
code :
% remove repetitive first x = 0 data at beginning
i0 = find(x<eps);
x = x(i0(end):end);
y = y(i0(end):end);
[x0,y0,segments]=selfintersect(x,y); % fex : https://fr.mathworks.com/matlabcentral/fileexchange/13351-fast-and-robust-self-intersections
figure(1)
plot(x,y,'b',x0,y0,'dr','markersize',15);
axis square
hold on
% compute area for each loop
for k = 1:numel(x0)
ind = (segments(k,1):segments(k,2));
x_tmp = x(ind);
y_tmp = y(ind);
% compute area
area(k) = trapz(x_tmp,y_tmp);
plot(x_tmp,y_tmp)
end
area
Mathieu NOE on 17 Nov 2023
yes this is another alternative ; NB that results are quite the same , I am not sure where the small difference comes from.
I opted for trapz to get a better result (vs an Euler integral), but I don't know the method used in polyarea
Results :
area = 71.3220 125.0467 132.8896 (trapz)
area2 = 72.5056 125.3691 132.8896 (polyarea)
% remove repetitive first x = 0 data at beginning
i0 = find(x<eps);
x = x(i0(end):end);
y = y(i0(end):end);
[x0,y0,segments]=selfintersect(x,y); % fex : https://fr.mathworks.com/matlabcentral/fileexchange/13351-fast-and-robust-self-intersections
figure(1)
plot(x,y,'b',x0,y0,'dr','markersize',15);
axis square
hold on
% compute area for each loop
for k = 1:numel(x0)
ind = (segments(k,1):segments(k,2));
x_tmp = x(ind);
y_tmp = y(ind);
% compute area
area(k) = trapz(x_tmp,y_tmp);
area2(k) = polyarea(x_tmp,y_tmp);
plot(x_tmp,y_tmp)
end
area
area2
Mathieu NOE on 11 Dec 2023
hello again @Sahil Wani
do you mind accepting my answer (if it has fullfiled your expectations ) ? tx

### Categories

Find more on Numerical Integration and Differentiation in Help Center and File Exchange

R2022a

### Community Treasure Hunt

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

Start Hunting!