MATLAB Answers

Area under the curve ignoring axis values (Absolute area)

조회 수: 2(최근 30일)
Ganesh Naik
Ganesh Naik 2021년 7월 24일
댓글: Ganesh Naik 2021년 7월 25일
Hi all, I am computing area under the curve using "Trapz" function where it takes x and y co-ordinates into consideration. For example, if you consider the attached figure, I am getting the value of shaded area as 296 where it takes into x and y axis values. But I would like to compute only the absolute area ignoring x and y axis values. In this example y axis height is around 7 (-84 to -91) and x axis distance is around 0.1 hence the absolute area would be very small. Any help in this would be highly appreciated.

채택된 답변

Scott MacKenzie
Scott MacKenzie 2021년 7월 24일
편집: Scott MacKenzie 2021년 7월 24일
The trapz function uses integration so the result is the area under the curve. That's not what you want. I suggest you first create a polygon of points encompassing the area of interest. Then use the area function to get the area. Here's and example using some test data similar to your data.
% test data
x = -0.8:0.1:1;
y = [-75 -76 -77 -78 -78 -79 -80 -81 -86 -87 -88.3 -92 -91 ...
-88 -86 -85 -84 -84 -83];
% x range for area of interest
x1 = 0;
x2 = 0.6;
% find x indices for range of interest
idx1 = find(x >= x1, 1);
idx2 = find(x >= x2, 1);
% create polyshape for area of interest
x1 = x(idx1:idx2);
y1 = y(idx1:idx2);
ps = polyshape(x1, y1);
% compute and output area
a3 = polyarea(x1,y1);
fprintf('Area: %f\n', a3);
Area: 1.630000
% plot it
plot(x,y);
set(gca,'ylim', [-95 -70]);
hold on;
plot(ps);
  댓글 수: 4
Scott MacKenzie
Scott MacKenzie 2021년 7월 24일
I just posted an new answer that uses ginput.

댓글을 달려면 로그인하십시오.

추가 답변(1개)

Scott MacKenzie
Scott MacKenzie 2021년 7월 24일
편집: Scott MacKenzie 2021년 7월 24일
@Ganesh Naik Here's a new answer that uses ginput to "select" data points along the line for definiing the area of interest. You'll need to run this yourself to get a feel for the interaction with a mouse. Select two points along the data line and the area will be computed, sent to the command window, and plotted.
% test data (similar pattern to data in question)
xx = -0.8:0.1:1;
yy = [-75 -76 -77 -78 -78 -79 -80 -81 -86 -87 -88.3 -92 -91 ...
-88 -86 -85 -84 -84 -83];
% interpolate to get more points and better "closest" point to mouse click
x = linspace(min(xx), max(xx), 250);
y = interp1(xx, yy, x);
% plot data and set axes
plot(x,y);
hold on;
axis([-1, 1.2, -95, -70]);
% get two mouse button clicks
[gx, gy] = ginput(2);
% get indices of "closest" data points along x-axis
idx1 = find(x >= gx(1), 1);
idx2 = find(x >= gx(2), 1);
% create polyshape for area of interest
x1 = x(idx1:idx2);
y1 = y(idx1:idx2);
ps = polyshape(x1, y1);
% compute, output, and plot area
a = polyarea(x1,y1);
fprintf('Area: %f\n', a);
plot(ps);
  댓글 수: 1
Ganesh Naik
Ganesh Naik 2021년 7월 25일
Hi Scott, thanks for your help with the ginput part. Although I am using modifed ginput function but interpolating part that you mentioned would help me to select the precise points. Thanks again for your help, much appreciated. I am going to accept this answer.

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by