Area between a curve and a baseline
10 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I want to create a base line (red line) from the plot and calculate area between the base line and curve (blue line).Curve is a vector. Baseline is drawn manually using code below. [x y]=ginput(2); line(x,y);
Any help/ suggestions is highly appreciated.
Thanks
0 comentarios
Respuesta aceptada
Andrei Bobrov
el 13 de Nov. de 2012
Editada: Andrei Bobrov
el 13 de Nov. de 2012
data - your array < 2 x N >, data(1,:) - abscissa; data(2,:) - ordinate.
plot(data(1,:),data(2,:));
[x y]=ginput(2);
t = x(1) <= data(1,:) & x(2) >= data(1,:);
X = data(1,t);
out = trapz(X,diff([interp1(x,y,X);data(2,t);]))
3 comentarios
Más respuestas (1)
Teja Muppirala
el 13 de Nov. de 2012
You could try something along the lines of this:
% Just making some data
x0 = 0:0.001:5;
y0 = sin(x0);
plot(x0,y0);
grid on; set(gca,'layer','top');
% Get your two points
[x y]=ginput(2); line(x,y);
% Break up the line segment into a sufficiently fine grid
N = 10001;
x_fine = linspace(x(1),x(2),N);
dx = x_fine(2)-x_fine(1);
% Interpolate the values at the grid points
top = interp1(x0,y0,x_fine); % Top of the area
bottom = interp1(x,y,x_fine); % Bottom of the area
% Get the area using TRAPZ and show it
area = dx*trapz(top-bottom)
patch([x_fine fliplr(x_fine)], [top fliplr(bottom)],'r');
Just replace the sine with whatever data you are using (the example above uses row vectors, so if your data is in a column instead, you'll probably have to make some minor modifications)
Ver también
Categorías
Más información sobre Numerical Integration and Differentiation en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!