Asked by BOB
on 10 Sep 2018

Hi,

I have a function which produces a set of horizontal and vertical graph axes intercepts. There are 120 sets of these intercepts:

for Z = 1:120

hrz = hix(x(:,Z),mb(:,Z))'; %[X Y] Matrix of horizontal intercepts

vrt = vix(y(:,Z),mb(:,Z))'; %[X Y] Matrix of vertical intercepts

end

I want to store each of these sets of intercepts in a matrix, i.e. I want to be able to call the second set of intercepts by simply calling matrix(2).

Is anyone aware of a way to achieve this?

Thanks

Answer by Guillaume
on 10 Sep 2018

Accepted Answer

I'm assuming that hix and vix are functions, and I'm assuming that for each pair of vector input, they each return a vector of the same size as the input. In which case,

hrz = zeros(size(x)); %predeclare output matrix

vrt = zeros(size(x));

for Z = 1:120

hrz(:, Z) = hix(x(:, Z), mb(:, Z));

vrt(:, Z) = vix(y(:, Z), mb(:, Z));

end

BOB
on 10 Sep 2018

Guillaume
on 10 Sep 2018

store the different length vector of each iteration of the loop in a single matrix.

Ah! That needed explaining in the question. By definition, a matrix has the same number of rows/columns for each column/row. So you can't store results of varying length in a matrix unless you pad the shorter ones (which is rarely a good approach).

hrz = cell(1, size(x, 2)); %preallocate output

vrt = cell(1, size(x, 2));

for Z = 1:size(x, 2) %better not to hardcode the size

hrz{Z} = hix(x(:, Z), mb(:, Z));

vrt{Z} = vix(y(:, Z), mb(:, Z));

end

BOB
on 10 Sep 2018

That works perfectly! Thanks for the persistence, I'll make sure to be more clear next time.

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.