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

조회 수: 1 (최근 30일)
LEI Li
LEI Li 2021년 9월 29일
댓글: LEI Li 2021년 9월 29일
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에서 Digital Filter Analysis에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by