Optimise a reference that cuts my curve into 2 equal sections

1 view (last 30 days)
Hello,
I am collecting data from excel, then basic idea is that i want to determine a constant value line that cuts my curve into 2 eqaual sections (area above the line and the curve = area under).
The objective is to determine the value of the red line.

Accepted Answer

Matt J
Matt J on 12 Feb 2022
Edited: Matt J on 12 Feb 2022
%t= time, X=consumption, x=unknown midline
tc=t-t(1);
Xc=cumtrapz(t,X);
x=optimvar('x');
sol=solve( optimproblem('Objective',x,'Constraints',Xc-x*tc<=90,'ObjectiveSense','minimize') );
lb=sol.x; %lower bound
sol=solve( optimproblem('Objective',x,'Constraints',10<=Xc-x*tc,'ObjectiveSense','maximize') );
ub=sol.x; %upper bound
if lb>ub
disp 'Problem is infeasible'
else
xunc=trapz(t,X)/(t(end)-t(1)); %unconstrained solution
x=min(max(xunc,lb),ub); %constrained solution
end
  3 Comments

Sign in to comment.

More Answers (2)

William Rose
William Rose on 12 Feb 2022
If you mean that the area between the red line and the blue curve abve the line equals the area between the red line and the blue curve below the line, then the height of the red line is simply the mean value of the blue line data.
  5 Comments
fadi awar
fadi awar on 12 Feb 2022
Kindly find attached the files.
I am to get the result according to my limits even if in this case of chosen data it wont matter a lot.
But Future wise I will be chaniging the data.
Thank you

Sign in to comment.


Catalytic
Catalytic on 12 Feb 2022
Edited: Catalytic on 12 Feb 2022
midline = trapz(x,y)/(max(x)-min(x))

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by