集成返回预定义区域所需的 y 值
Integration returning required y value for predefined area
鉴于以下情况:
具有 x
(时间 [s])和 y
(此处流量 [m³/s])的时间序列
值V1
(相同单位积分y
),小于所有x
的积分。在这种情况下,体积较小 [m³].
我要计算:
y
值y_V1
使得直线y = y_V1
和曲线y
之间的积分等于V1
。
下图显示了这一点,橙色区域是 V1
,我想要 y
轴上的圆圈值:
V1
必须放在峰的周围
我认为这一定是一个迭代过程,其中还必须由用户设置拟合标准(和精确度)。
直到现在,我还没有找到开始的方法;除了纯粹的整合。
想法是指定一个区域。应计算包围该区域的峰左侧和右侧的 y 值。
编辑
如果应用接受的答案,这就是结果。
您可以通过降低一些 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)] )
输出:
鉴于以下情况:
具有
x
(时间 [s])和y
(此处流量 [m³/s])的时间序列值
V1
(相同单位积分y
),小于所有x
的积分。在这种情况下,体积较小 [m³].
我要计算:
y
值y_V1
使得直线y = y_V1
和曲线y
之间的积分等于V1
。下图显示了这一点,橙色区域是
V1
,我想要y
轴上的圆圈值:V1
必须放在峰的周围
我认为这一定是一个迭代过程,其中还必须由用户设置拟合标准(和精确度)。
直到现在,我还没有找到开始的方法;除了纯粹的整合。
想法是指定一个区域。应计算包围该区域的峰左侧和右侧的 y 值。
编辑
如果应用接受的答案,这就是结果。
您可以通过降低一些 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)] )
输出: