Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.

How to make a matrix from four looping variables in MATLAB?

I want to create an F matrix with four components: F11, F12, F21, and F22

F11...F22 are variables being created from a for loop

that is,

for i=1:240

F11(i)=i + 1

and so on

Now, I want to create a separate matrix for each one of these four variables at each iteration of x

that is

F(1)=[F11(1),F12(1);F21(1),F22(1)]

all the way up to

F(240)=[F11(240),F12(240);F21(240),F22(240)]

I can't figure it out, i keep getting a single F matrix that sums all the values up, which is what i don't want. Help?

1 Answer

Relevance
  • ooorah
    Lv 6
    7 years ago
    Favorite Answer

    I'm guessing you'll want a three-dimensional array, where each "layer" contains the matrix [F11 F12 ; F21 F22] for that time slot. Assuming you already have row vectors for F11, F12, etc, you could build this with a for loop:

    F = zeros(2, 2, length(F11)); % Always remember to preallocate

    for k = 1:length(F11)

    F(:, :, k) = [F11(k) F12(k) ; F21(k) F22(k)];

    end

    Although it would be more efficient to just reshape your row vectors and put them in place:

    shape = [1 1 length(F11)];

    F = [reshape(F11, shape) reshape(F12, shape) ; reshape(F21, shape) reshape(F22, shape)];

    And even more efficient to have just built the array F rather than building F11, ect first. Now you would access each layer in the third index F(:, :, 25) is [F11(25) F12(25) ; F21(25) F22(25)].

    Or, maybe you want to use a cell array instead. That is less space efficient, but maybe is easier to look at?

    F = cell(length(F11), 1); % Always remember to preallocate

    for k = 1:length(F11)

    F{k} = [F11(k) F12(k) ; F21(k) F22(k)];

    end

    And now you would access each layer with F{k}. Note the curly braces. That is important.

Still have questions? Get your answers by asking now.