У меня есть это для оператора цикла и switch, который проходит через определенную строку матрицы, оценивает все, что находится в этом элементе, и обновляет на этой основе другую строку той же матрицы. Моя проблема в том, что она, похоже, не оценивает должным образом. Выполняя некоторую ручную отладку, она периодически пропускает определенные условия и не выполняет команду внутри (хотя и не всегда), и я не могу понять, почему ... В любом случае, вот код, извините, что это целая функция. Когда я разделил его на примерную матрицу, а затем на элемент switch/for loop, он работал. Это просто не работает в целом (и мне нужно работать таким образом, то есть рандомизированное)Оператор switch/case не правильно оценивает
ptpschedule = zeros(3, ntrials);
silenttrialpercent = 0.25;
noSilentTrials = ntrials*silenttrialpercent;
ptpschedule(1,1:ntrials) = 1;
ptpschedule(1,1:noSilentTrials) = 0;
ptpschedule(1,:) = ptpschedule(1,randperm(ntrials));
V = 4; % number of different time points
x = 0.8; %window for beeps
a = x/V % spacing between each beep to fill in an x second window, in this case 200ms.
ind = ptpschedule(1,:)>0; % logical index of positive values in the first row
n = nnz(ind);
vals = mod(0.05:a:n-1, x); % values to be randomly thrown in.
vals(vals==0) = x;
%This guarantees the same number of each value if n is a multiple of V
ptpschedule(2,ind) = vals(randperm(n)); % fill values in second row in random order
for i = 1:length(ptpschedule)
switch ptpschedule(2,i)
case 0.05
ptpschedule(3,i) = 1
case 0.25
ptpschedule(3,i) = 2
case 0.45
ptpschedule(3,i) = 3
case 0.65
ptpschedule(3,i) = 4
end
end
Иногда он оценивает правильно и помещает в соответствующее число, но в других случаях это не только и листья он равен 0 (хотя, когда ptpschedule (1, i) == 0, он должен оставить соответствующее значение в третьей строке равным 0).
Нужный выход 10 испытаний будет:
[0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00;
0.00, 0.00, 0.05, 0.45, 0.05, 0.65, 0.45, 0.25, 0.25, 0.65;
0.00, 0.00, 1.00, 3.00, 1.00, 4.00, 3.00, 2.00, 2.00, 4.00]
Спасибо!
Martin
Отлично! Спасибо! У меня было ощущение, что это может быть связано с этим, но я действительно не знал, как это исправить! Выходной сигнал будет таким же ожидаемым и желательным. Благодаря! – Yoddlenod
@Yoddlenod на самом деле, скорее используйте 'round' вместо' floor', возможно, более надежный. – thewaywewalk