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

1 Ansicht (letzte 30 Tage)
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
:

Akzeptierte Antwort

Mathieu NOE
Mathieu NOE am 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 :
load('x.mat')
load('y.mat')
% 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
  4 Kommentare
Mathieu NOE
Mathieu NOE am 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)
load('x.mat')
load('y.mat')
% 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
Mathieu NOE am 11 Dez. 2023
hello again @Sahil Wani
do you mind accepting my answer (if it has fullfiled your expectations ) ? tx

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte


Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by