积分返回预定义区域所需的y值

时间:2019-03-30 12:31:28

标签: matlab integration area

给出以下内容:

  • 时间序列为x(时间[s])和y(此处为排放[m³/ s])

  • V1(相同的单位积分y),小于所有x的积分。在这种情况下,体积很小[m³]。

我想计算:

  • yy_V1,使得线y = y_V1和曲线y之间的积分等于V1

    下图显示了这一点,橙色区域为V1,我想在y轴上圈出一个值:

    Find corrsponding y

  • V1必须放在峰值附近。

我认为这必须是一个反复的过程,在此过程中,用户还必须设置合适的标准(以及精确度)。

直到现在,我还没有找到开始的方法。除了纯粹的整合。

想法是指定一个区域。应该计算出包围该区域的峰的左侧和右侧的y值。


修改

这是结果,如果应用了接受的答案。

result

1 个答案:

答案 0 :(得分:1)

您可以通过减小一些y值直到达到目标区域来实现。有关详细信息,请参见下面的评论。

% 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)] )

输出:

plot