Хранение данных в матрице в циклах for и if - PullRequest
0 голосов
/ 22 сентября 2011

У меня проблема с хранением данных в матрице в циклах for и if,

Результаты дают мне только последнее значение последней итерации. Я хочу все

Результаты всех итераций, которые будут сохранены в матрице, будут последовательностью.

Вот пример моего кода:

clear all

clc

%%%%%%%%%%%%%%

 for M=1:3;

    for D=1:5;

%%%%%%%%%%%%%%

    if ((M == 1) && (D <= 3)) || ((M == 3) && (2 <= D  && D <= 5))

        U1=[5 6];

    else

        U1=[0 0];

    end

    % desired output: 

    % U1=[5 6 5 6 5 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 6 5 6 5 6 5 6]

%%%%%%%%%%%%%%

    if (M == 1) && (D==4) || ((M == 3) && (D == 1))

        U2=[8 9];

    else

        U2=[0 0];

    end

    % desired output: 

    % U2=[0 0 0 0 0 0 8 9 0 0 0 0 0 0 0 0 0 0 0 0 8 9 0 0 0 0 0 0 0 0]

%%%%%%%%%%%%%%

    if ((M == 1) && (D == 5)) || ((M == 2) && (1 <= D  && D <= 5)) 

        U3=[2 6];

    else

        U3=[0 0];

    end

    % desired output:

    % U3=[0 0 0 0 0 0 0 0 2 6 2 6 2 6 2 6 2 6 2 6 0 0 0 0 0 0 0 0 0 0]

 %%%%%%%%%%%%%%

    end
end

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Вы перезаписываете свои матрицы каждый раз, когда пишете UX=[X Y];.

Если вы хотите добавить данные, либо предварительно выделите ваши матрицы и укажите индекс матрицы каждый раз, когда вы присваиваете новое значение, либо напишите UX=[UX X Y];, чтобы напрямую добавить данные в конец ваших матриц.

clear all
clc
U1=[];
U2=[];
U3=[];
for M=1:3
    for D=1:5
        if ((M == 1) && (D <= 3)) || ((M == 3) && (2 <= D  && D <= 5))
            U1=[U1 5 6]; 
        else
            U1=[U1 0 0];
        end
        % desired output: 
        % U1=[5 6 5 6 5 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 6 5 6 5 6 5 6]
        if (M == 1) && (D==4) || ((M == 3) && (D == 1))
            U2=[U2 8 9];
        else
            U2=[U2 0 0];
        end
        % desired output: 
        % U2=[0 0 0 0 0 0 8 9 0 0 0 0 0 0 0 0 0 0 0 0 8 9 0 0 0 0 0 0 0 0]
        if ((M == 1) && (D == 5)) || ((M == 2) && (1 <= D  && D <= 5)) 
            U3=[U3 2 6];
        else
            U3=[U3 0 0];
        end
        % desired output:
        % U3=[0 0 0 0 0 0 0 0 2 6 2 6 2 6 2 6 2 6 2 6 0 0 0 0 0 0 0 0 0 0]
    end
end
1 голос
/ 23 сентября 2011

Вы можете вообще избежать циклов:

[M,D] = meshgrid(1:3,1:5);
M = M(:)'; D = D(:)';

idx1 = ( M==1 & D<=3 ) | ( M== 3 & 2<=D & D<=5 );
idx2 = ( M==1 & D==4) | ( M==3 & D==1 );
idx3 = ( M==1 & D==5 ) | ( M==2 & 1<=D & D<=5 );

U1 = bsxfun(@times, idx1, [5;6]); U1 = U1(:)';
U2 = bsxfun(@times, idx2, [8;9]); U2 = U2(:)';
U3 = bsxfun(@times, idx3, [2;6]); U3 = U3(:)';
...