Optimise a reference that cuts my curve into 2 equal sections
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
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.
0 Kommentare
Akzeptierte Antwort
Matt J
am 12 Feb. 2022
Bearbeitet: Matt J
am 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 Kommentare
Weitere Antworten (2)
William Rose
am 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 Kommentare
dpb
am 12 Feb. 2022
Attach the data as a .mat file.
Just looking at the graph, I'd venture it isn't possible to meet the constraints that the integral of the area be <95 when the magnitudes of the integrand are in the thousands. Just by a very crude approximation of the leftmost area (brown?) as roughly a rectangle of height ~(2800-1800) and a duration of 12, the integral would be roughly 1000*12 --> 12,000. Unless there's a very small scaling factor to be applied, it "just ain't a-gonna' happen".
Siehe auch
Kategorien
Mehr zu Subplots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!