I need to determine the no. of loops and area under each loop from the xy plot.
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Sahil Wani
am 13 Nov. 2023
Kommentiert: Mathieu NOE
am 11 Dez. 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
:
2 Kommentare
Akzeptierte Antwort
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
am 17 Nov. 2023
hello @Dyuman Joshi
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
am 11 Dez. 2023
hello again @Sahil Wani
do you mind accepting my answer (if it has fullfiled your expectations ) ? tx
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Numerical Integration and Differentiation finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!