I dont understand how to correct this error in line 113

조회 수: 4 (최근 30일)
Amil Ali
Amil Ali 2023년 4월 16일
댓글: Amil Ali 2023년 4월 17일
I get and error in line 113 saying thaht the "array indices must be positive integers or logical values" - in the code below how can i fix it
113 = SumPeaks(CurrentDay) = SumPeaks(CurrentDay) + PeaksVar(i,Column);
%% Find peaks and further calculations
%Find peaks in variables using restrictions for prominence and distance
% 0.5 is lowest accepted hight any below this value is disregarded and
% 60 (1min) ,means that any two detected peaks that are less than 60 data points apart will be considered a single peak
[pks_in,locs_in] = findpeaks(transpose(H2S_in(:,3)), "MinPeakProminence",0.5,"MinPeakDistance",60); % "MinPeakProminence" and "MinPeakDistance" parameters set a threshold for peak detection by specifying the minimum and minimum distance between peaks, respectively.
[pks_out,locs_out] = findpeaks(transpose(H2S_out(:,3)), "MinPeakProminence",0.5,"MinPeakDistance",60);% "pks_in" and "pks_out" variables store the peak values, and "locs_in" and "locs_out" store their locations in the data.
%Define new variables using only rows which contain a peak
% The resulting Peaks_in and Peaks_out matrices only contain the rows with the peak values and associated timestamps, which can be used for further analysis.
Peaks_in = H2S_in(locs_in,:);
Peaks_out = H2S_out(locs_out,:);
%% Daily Average Peaks and Removal Efficiency
CleanPeaks_in = RelevantPeaks(Peaks_in,H2S_in,100); %Find corresponding peaks to Peaks_in, Max Threshold set to 100
CleanPeaks_out = RelevantPeaks(Peaks_out,H2S_out,100);
%Calculate daily averages from CleanPeaks, Max Threshold set to 2000, where 2 is values in and 4 is values out
DAPeaks_in = DailyAverageNY(CleanPeaks_in,2,2000);
DAPeaks_out = DailyAverageNY(CleanPeaks_out,4,2000);
%Functions
function PeakTable = RelevantPeaks(PeaksVar_in,Var_out,Threshold) %PeaksVar_in is Peaks_in, Var_out is variable (e.g. H2S_OUT)
PeakTable = [];
for j = 1:length(PeaksVar_in)
if PeaksVar_in(j,3)<0 || PeaksVar_in(j,3) > Threshold
continue
else
for i = 1:length(Var_out)
if Var_out(i,2) < PeaksVar_in(j,2) || Var_out(i,3) < 0 %Looking at timestamps, out must be after in, and outlet must be =>0
continue
elseif Var_out(i,3) > Var_out(i+1,3) %If the next out-value is lower than the current one, a peak has been reached
PeakTable = [PeakTable; PeaksVar_in(j,2), PeaksVar_in(j,3), Var_out(i,2), Var_out(i,3)]; %Peak_in (time), Peak_in (value), Peak_out (time), Peak_out (value)
break
else
continue
end
end
end
end
end
% Defined for estimating the average paks observed in 2022.
function DailyAveragePeaksNY = DailyAverageNY(PeaksVar,Column,Threshold) %CleanPeaks_var, Column is 2 for in and 4 for out, Threshold is max allowed peak value
FinalDay = floor(PeaksVar(length(PeaksVar),1));
SumPeaks = zeros(FinalDay,1);
AmountPeaks = zeros(FinalDay,1);
for i = 1:length(PeaksVar)
if PeaksVar(i,Column) > Threshold
continue
else
CurrentDay = floor(PeaksVar(i,1));
SumPeaks(CurrentDay) = SumPeaks(CurrentDay) + PeaksVar(i,Column);
AmountPeaks(CurrentDay) = AmountPeaks(CurrentDay) + 1;
end
end
DailyAveragePeaksNY = SumPeaks ./ AmountPeaks;
end
  댓글 수: 2
DGM
DGM 2023년 4월 16일
Is there any reason to believe that PeaksVar(:,1) is always >=1?
Amil Ali
Amil Ali 2023년 4월 17일
MATLAB starts count at 1 hence i put 1 but maybe your right - do have any syggestions

댓글을 달려면 로그인하십시오.

답변 (1개)

Image Analyst
Image Analyst 2023년 4월 16일

카테고리

Help CenterFile Exchange에서 Descriptive Statistics에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by