How to find the are between two graphs?

조회 수: 2 (최근 30일)
Angelavtc
Angelavtc 2020년 4월 27일
답변: Angelavtc 2020년 4월 29일
Hello to all!
How can I find the area in purple between the two graphs in green and blue? is there a exchange file that can do this for me? Considering y limits as [-3000,3000] ?
I attach the points data (x1,y1 definies one curve and x2,y2 the other).
Thanks in advance!
  댓글 수: 1
KSSV
KSSV 2020년 4월 27일
Read about polyarea, trapz.

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

채택된 답변

Angelavtc
Angelavtc 2020년 4월 29일
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1st graph %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t=25
x1=Array_jan_13{t}.Volume;
y1=Array_jan_13{t}.Price;
%x2=Array_jan_13_s{t}.Volume_s
%y2=Array_jan_13_s{t}.Price_s
line1 = 2500*ones(1, length(x1));
%line2 = 2500*ones(1, length(x2));
x_inter=intersectPoints_jan_13{t}.x0;
y_inter=intersectPoints_jan_13{t}.y0;
hFig = figure
plot(x1, y1, 'r-', 'LineWidth', 2)
hold on
%plot(x2, y2, 'g-', 'LineWidth', 2)
%hold on
plot(x1, line1, 'b', 'LineWidth', 2);
hold on
%plot(x2, line2, 'b', 'LineWidth', 2);
%hold on
plot(x_inter,y_inter,'r.','markersize',18)
%CALCULATE THE AREA ABOVE THE DEMAND CURVE UNTIL THE INTERSECTION POINT
n=50000
%INTERPOLATE VALUES
x1_new=linspace(x1(1),x_inter,n);
y1_new=interp1(x1,y1,x1_new);
line_fine1 = 2500*ones(1, length(x1_new));
hFig = figure
plot(x1_new, y1_new, 'r-', 'LineWidth', 2)
hold on
plot(x1_new, line_fine1, 'b', 'LineWidth', 2);
hold on
plot(x_inter,y_inter,'r.','markersize',18)
%Gives the position of the first element in y1_new that meets the
%condition of being less than the condition
indexLeft = find(y1_new < 2500, 1, 'first');
% Put up vertical where the are will be calculated
xline(x1_new(indexLeft), 'Color', 'm', 'LineWidth', 2);
%the last element in demand that intersects which will be the last element
%where the area will be calculated
xline(x1_new(end), 'Color', 'y', 'LineWidth', 2);
% COMPUTE AREAS BETWEEN CURVE AND FLAT BLUE LINE
% Find that area below the line at 2500
%asigna los valores de x_fine desde el primer elemento hasta
%uno antes de que la curva y fuera mayor a 1
x_area=x1_new(indexLeft : end);
y_area=line_fine1(indexLeft : end)-y1_new(indexLeft : end);
area_Loss_up = trapz(x_area, y_area)
% To double check, compute area by summing also.
area_Loss2_up = sum(y_area) * abs(x1_new(2) - x1_new(1)) % Should be fairly close.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%2ND GRAPH %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Calculate the area between the y=2500 and supply curve
%until the intersection point
t=25
x2=Array_jan_13_s{t}.Volume_s;
y2=Array_jan_13_s{t}.Price_s;
line2 = 2500*ones(1, length(x2));
x_inter=intersectPoints_jan_13{t}.x0
y_inter=intersectPoints_jan_13{t}.y0
hFig = figure
plot(x2, y2, 'r-', 'LineWidth', 2)
hold on
plot(x2, line2, 'b', 'LineWidth', 2);
hold on
plot(x_inter,y_inter,'r.','markersize',18)
%CALCULATE THE AREA ABOVE THE DEMAND CURVE UNTIL THE INTERSECTION POINT
n=50000;
%INTERPOLATE VALUES
x2_new=linspace(x_inter, x2(end),n);
y2_new=interp1(x2,y2,x2_new);
line_fine2 = 2500*ones(1, length(x2_new));
hFig = figure
plot(x2_new, y2_new, 'r-', 'LineWidth', 2)
hold on
plot(x2_new, line_fine2, 'b', 'LineWidth', 2);
hold on
plot(x_inter,y_inter,'r.','markersize',18)
%Gives the position of the last element in y2_new that meets the
%condition of being less than the condition
indexLeft = find(y2_new < 2500, 1, 'last');
% Put up vertical where the are will be calculated
xline(x2_new(indexLeft), 'Color', 'm', 'LineWidth', 2);
%the first element in demand that intersects which will be the last element
%where the area will be calculated
xline(x2_new(1), 'Color', 'y', 'LineWidth', 2);
% COMPUTE AREAS BETWEEN CURVE AND FLAT BLUE LINE
% Find that area below the line at 2500
x_area_s=x2_new(1 : indexLeft);
y_area_s=line_fine2(1 : indexLeft)-y2_new(1 : indexLeft);
area_Loss_s_up = trapz(x_area_s, y_area_s)
% To double check, compute area by summing also.
area_Loss2_s_up= sum(y_area_s) * abs(x2_new(2) - x2_new(1))
Total_area_up=area_Loss_up+area_Loss_s_up
Total_area2_up=area_Loss2_up+area_Loss2_s_up

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Directed Graphs에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by