私はmatlabに初心者で、ピーク時に面積を計算することに問題があります。ピークを見つけるために使用するコードは次のとおりです。matlabでtrapzを使ってピーク下の面積を計算する方法は?
%% Peak flow analysis 2 (Figure 3)
flowtable = finalCSVnew(:,[1,7:8]); % create table containing DateAndTime, Durchflusslm, and SummeaktuellerTagm data
peakflowEvent = flowtable{:,2} > aa ; % determine the threshold of flow(m3/h) for peakflowEvent
% use false as logical vector to determine transition. With function diff,
% transitions from false (0) to true (1) will be 1 and transitions from true
% to false will be -1. This will be 1 at the start of a dry period and -1 after the end
peakTransitions = diff([false; peakflowEvent; false]);
eventStarts = find(peakTransitions == 1);
eventEnds = find(peakTransitions == -1) -1;
% define the peak flow of each event through the flow data (peakflow) and
% the time when peak flow is happened (peakflowtime)
[peakflow, peakflowlocrel] = arrayfun(@(s, e) max(flowtable.Durchflusslm(s:e)), eventStarts, eventEnds);
peakflowlocabs = peakflowlocrel + eventStarts - 1;
peakflowtime=flowtable.DateAndTime(peakflowlocabs);
% create result table containing start and end time for peak flow event, the duration
% between start and end time, and peak flow
peakflowanalysis2 = table(flowtable.DateAndTime(eventStarts), flowtable.DateAndTime(eventEnds), ...
flowtable.DateAndTime(eventEnds) - flowtable.DateAndTime(eventStarts), ...
peakflow, peakflowtime, ...
'VariableNames', {'Start', 'End', 'Duration','PeakFlow','PeakFlowTime'});
numPeakflow2 = height(peakflowanalysis2); % calculate the number of max flow
% plot flow and peak flow
figure(3)
plot(flowtable.DateAndTime,flowtable.Durchflusslm,flowtable.DateAndTime(peakflowlocabs),peakflow,'v','MarkerFaceColor','red',...
'MarkerSize',5)
xlabel('Date and Time'); % define Date and Time as x-axis
ylabel('Flow [m3/h]'); % define Flow as y-axis
title('Peak Flow Events (2)'); % define the title of the plot
legend('Flow','Peak Flow','Location','Northeast','Orientation','Vertical')
grid on % show grid on plot
datacursormode on % enable to display data value interactively in the plot
% clear temporary variables
clearvars peakflowEvent peakTransitions eventStarts eventEnds peakflowlocrel peakflowlocabs peakflow peakflowtime
2つのテーブルと1つの図が作成されます。ピークを含み、各イベントを表す図。ピークの数が=イベント の数は、テーブルには、元のデータが含まれています。彼らは、私は下の面積を計算する方法を知りたいのピーク
を持っているところ 以下この表は、フィルタリングされたデータが含まれています各イベントのピーク(11イベント)であり、すべての合計ではありません。私はtrapz()について読んでいましたが、複数のピークに対してどのように適用するのか混乱しました。手伝っていただけませんか?ご助力ありがとうございます。
返信いただきありがとうございますスクイジー。申し訳ありませんが、開始と終了をフローデータに変換することについてはまだ理解していません。それについてもっと説明していただけますか? –
Trapzはベクトルを入力する必要があります。大きなベクトルが1つしかないので、各フラッドイベントの開始と終了のインデックスをプロビジョニングする必要があります。あなたは文字列として開始日と終了日しか得られていないようです。開始と終了が同じときにベクトル内のインデックスを見つける必要があります。それは文字列で動作しますが、datenを使用して文字列を数値データに変換する場合よりも遅くなります。 – Squeezie
私のコードを編集しました。多分今はもっと明白です – Squeezie