how to store a double loop result into a matrix column by column?

1 次查看(过去 30 天)
I have a matrix cycle; What I am doing is to find out certain points satisfying the condition and store them into Array up and down;
When cycle1 is one column, it could work; but when cycle1 increases to 2 columns, then the double loop doesn't work.
up and down's size is not certain; I just estimate their size 100*12;
now the code has no error, but give wrong results.
please give me some suggestion about this code.
cycle1 = [butterworth_filter1,butterworth_filter2];
[m,n] = size(cycle1)
up = zeros(100,12);
down = zeros(100,12);
k=1;
for j = 1:n
for i = 1:m
if i == m
break
elseif cycle1(i,j) < 1.5e-5 && cycle1(i+1,j) > 1.5e-5
up(k,:) = i + 1;
k = k+1;
elseif cycle1(i,j) > 1.5e-5 && cycle1(i+1,j) < 1.5e-5
down(k,:) = i;
k = k+1;
end
end
end
  6 个评论
Geoff Hayes
Geoff Hayes 2021-9-29
So if (i,j) is "too big" then is k good enough? If not, where is the error?
Stephen23
Stephen23 2021-9-29
LEI Li's incorrectly posted "Answer" moved here:
from the test code, up has the result; now each column is the same; I need to chech the random matrix;
next thing is there should not exist 0 in the column; this is the reason I use k;
previously when I deal with one dimension array, I use
up(end+1) = i + 1; to store the location; but now I need to deal with a matrix; I stuck here.

请先登录,再进行评论。

回答(1 个)

Jan
Jan 2021-9-29
You are using one counter k for the up and the down lists.
cycle1 = [butterworth_filter1,butterworth_filter2];
[m, n] = size(cycle1)
up = zeros(100, 12);
down = zeros(100, 12);
kup = 1;
kdown = 1;
for j = 1:n
for i = 1:m - 1 % Simpler than: if i==m, break
if cycle1(i,j) < 1.5e-5 && cycle1(i+1,j) > 1.5e-5
up(kup,:) = i + 1; % Are you sure you want to set the complete row to i+1?
kup = kup + 1;
elseif cycle1(i,j) > 1.5e-5 && cycle1(i+1,j) < 1.5e-5
down(kdown, :) = i;
kdown = kdown + 1;
end
end
end
  1 个评论
LEI Li
LEI Li 2021-9-29
close all;
clear;
clc;
cycle1 = abs(randn(100,12));
for i = 1:12
plot(cycle1(:,i))
hold on
end
[m,n] = size(cycle1)
up = zeros(100,12);
down = zeros(100,12);
kup=1;
kdown=1;
for j = 1:n
for i = 1:m-1
% if i == m-1
% break
if cycle1(i,j) < 0.2 && cycle1(i+1,j) > 0.2
up(kup,:) = i + 1; %up only has one value now??
kup = kup+1;
elseif cycle1(i,j) > 0.2 && cycle1(i+1,j) < 0.2
down(kdown,:) = i;
kdown = kdown+1; %down only has one value now??
end
end
end
figure (4)
plot(cycle1)
hold on
plot(kup, cycle1(kup), 'go', 'MarkerSize', 8, 'MarkerFaceColor', 'g')
plot(kdown, cycle1(kdown), 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'r')
xlabel('Time(s)');ylabel('EMG(V)');title('Muscle Activation & Cycles')
legend ('Subject 1')

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Annotations 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by