Reputation: 35
Given the following:
Time series with x
(time [s]) and y
(here discharge [m³/s])
Value V1
(same units integrated y
), smaller than the integral over all of x
. In this case a small volume [m³].
I would like to calculate:
The y
value y_V1
such that the integral between the line y = y_V1
and the curve y
equals V1
.
The following plot shows this, the orange region is V1
, I want the circled value on the y
axis:
The V1
must be placed around the peak.
I think this must be an iterative process, where also a the fitting criteria (and the degree of exactness) must be set by the user.
Until now, I haven't found a way to start; besides the pure integration.
The idea is to specify an area. The y value left and right of the peak which envelops this area should be calculated.
Edit
This is the result, if the accepted answer is applied.
Upvotes: 1
Views: 118
Reputation: 30146
You can do this by decreasing some y
value until your area target is met. See the comments below for details.
% Input data
x = 0:0.01:pi;
y = sin(x);
target = 1; % Target area
yi = max( y ); % Initialise yi to be max possible y
dy = 0.001; % Step change in yi
Ai = 0; % Area each iteration
thresh = 0; % Threshold for stopping loop
while target - Ai > thresh && yi >= min(y)
yi = yi - dy;
ix = y >= yi;
% Approximate integral above the line
Ai = trapz( x(ix), y(ix) - yi );
end
% Plot
figure(1); clf; hold on
plot( x, y );
patch( x(ix), y(ix), [1,0.5,0.5], 'facealpha', 0.5 );
plot( x, ones(size(x))*yi, '--', 'linewidth', 2 )
xlim( [min(x),max(x)] )
Output:
Upvotes: 1