Интеграция, возвращающая требуемое значение y для предварительно определенной области - PullRequest
1 голос
/ 30 марта 2019

Учитывая следующее:

  • Временные ряды с x (время [с]) и y (здесь расход [м³ / с])

  • Значение V1 (те же единицы измерения y), меньше интеграла по всем x. В этом случае небольшой объем [м³].

Я хотел бы рассчитать:

  • Значение y y_V1, такое что интеграл между линией y = y_V1 и кривой y равен V1.

    На следующем графике это показано, оранжевая область равна V1, я хочу обвести значение на оси y:

    Find corrsponding y

  • V1 должен располагаться вокруг пика.

Я думаю, что это должен быть итеративный процесс, где пользователь также должен установить критерии соответствия (и степень точности).

До сих пор я не нашел способа начать; кроме чистой интеграции.

Идея состоит в том, чтобы указать область. Значение y слева и справа от пика, который охватывает эту область, должно быть рассчитано.


Редактировать

Это результат, если принятый ответ применяется.

result

1 Ответ

1 голос
/ 30 марта 2019

Вы можете сделать это, уменьшив некоторое значение 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...