Effacer les filtres
Effacer les filtres

How to find area under graph between two points ?

463 vues (au cours des 30 derniers jours)
Mohamad Firdaus Bin Adnan
Mohamad Firdaus Bin Adnan le 11 Juin 2021
Modifié(e) : Soham le 5 Avr 2024
I used this coding but i dont know how to set the specific points. I used array data.
M = area(A(:,1),A(:,2));
Int = trapz(A(:,1),A(:,2));
  1 commentaire
Scott MacKenzie
Scott MacKenzie le 12 Juin 2021
What are the "specific points" of interest? Are they indices within A, x-values, y-values, or something else? Also, post the data for A if you can.

Connectez-vous pour commenter.

Réponses (2)

Scott MacKenzie
Scott MacKenzie le 15 Juin 2021
Modifié(e) : Scott MacKenzie le 17 Juil 2021
Assuming you want the area under the curve between two values of x (the "specific points" in your questions), here's what I put together using test data. The area under the curve is computed from x = 60 to x = 110. The area is computed two ways, using trapz and using integral. They give the same result. trapz is useful if the data are sample points gathered empirically. If you have a formula to work with, then integral can be used. It's also possible to use polyarea, although that is not demonstrated here.
% test data
x = 0:0.1:150;
y = 0.2 + sind(x) .* cosd(2*x).^2;
fun = @(x) (0.2 + sind(x) .* cosd(2*x).^2);
% organize in matrix A, as in question
A = [x' y'];
% plot total area under curve over x domain
area(A(:,1), A(:,2));
xticks(0:10:150);
hold on;
% example "specific points" to find area between
x1 = 60;
x2 = 110;
% find indices of these points in A
idx1 = find(A(:,1) >= x1, 1);
idx2 = find(A(:,1) >= x2, 1);
% show the area under curve between x1 and x2
area(A(idx1:idx2,1), A(idx1:idx2,2), 'facecolor', [.7 .8 .9]);
% get area under curve from x1 to x2 using trapz
a1 = trapz(A(idx1:idx2,1), A(idx1:idx2,2))
% get area under curve from x1 to x2 using integral
a2 = integral(fun, x1, x2)
% print area in chart
ax = gca;
xt = (x2 + x1) / 2;
yt = 0.8 * mean(ax.YLim);
s = sprintf('Area = %.2f', a1);
text(xt, yt, s);
Output in command window:
a1 =
47.285
a2 =
47.285
  1 commentaire
Soham
Soham le 5 Avr 2024
Modifié(e) : Soham le 5 Avr 2024
I dont know if anything changed since the time this answer was posted, but this code will give an error with Indexing, since the starting value of A(:, 1) is a zero, while the values of A(:, 2) do not.
The following code shows the figure as shown in the answer.
NB: The error has since disappeared, but I will keep my answer here, incase someone runs into the issue as an alterntive
% test data
x = 0:0.1:150;
y = 0.2 + sind(x) .* cosd(2*x).^2;
fun = @(x) (0.2 + sind(x) .* cosd(2*x).^2);
% organize in matrix A, as in question
A = [x' y'];
% plot total area under curve over x domain
area(A( [1; find(A(:,1))] , 1), A( (find(A(:,2))) , 2));
xticks(0:10:150);
hold on;
% example "specific points" to find area between
x1 = 60;
x2 = 110;
% find indices of these points in A
idx1 = find(A(:,1) >= x1, 1);
idx2 = find(A(:,1) >= x2, 1);
% show the area under curve between x1 and x2
area(A(idx1:idx2,1), A(idx1:idx2,2), 'facecolor', [.7 .8 .9]);
% get area under curve from x1 to x2 using trapz
a1 = trapz(A(idx1:idx2,1), A(idx1:idx2,2));
% get area under curve from x1 to x2 using integral
a2 = integral(fun, x1, x2);
% print area in chart
ax = gca;
xt = (x2 + x1) / 2;
yt = 0.8 * mean(ax.YLim);
s = sprintf('Area = %.2f', a1);
text(xt, yt, s);

Connectez-vous pour commenter.


Vimal Rathod
Vimal Rathod le 15 Juin 2021
Modifié(e) : Vimal Rathod le 15 Juin 2021
Hi,
If you would want to find area by specific points from array, you could use the indices of array to find the area.
M = trapz(A(k:l,1),A(k:l,2)); % for area between k and l index values of array A
If you would want to find area from a custom point on the line to another custom point on the line, make sure to include the array indices along with the custom point in the area.
%finding area between (x1,y1) and (x2,y2) considering these two lies on the
%plot
%k and l are the indices of array values lying in between these points.
M = trapz([x1,A(k:l,1),x2], [y1, A(K:l,2), y2]);
Hope this helps!
  1 commentaire
Scott MacKenzie
Scott MacKenzie le 15 Juin 2021
@Vimal Rathod M, in your code, is a handle to the area object, not the area of the object.
@Mohamad Firdaus Bin Adnan's question is limited to a sub-area, as given by "specific points". I asked in my comment for clarification on this, for example whether the specfic points are indices into the A array (k and l in your answer) or values along the x-axis (e.g., 80 and 100).

Connectez-vous pour commenter.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by