loops - How can I generate the following Matrices in Matlab - fast method? -
i have 2 input variables:
n=10; m=4; using matlab, want generate next matrices - without using loops, m , n:
%n = 1 2 3 4 5 6 7 8 9 mat1 = [2, 3, 4, 5, 6, 7, 8, 9, 10; %m=1 -> mat1(1, i) = n(i)+1 3, 6, 9, 12, 15, 18, 21, 27, 30; %m=2 -> mat1(2, i) = n(i)+n(i)*2 4, 8, 12, 16, 20, 24, 28, 32, 36; %m=3 -> mat1(2, i) = n(i)+n(i)*3 5, 10, 15, 20, 25, 30, 35, 40, 45] %m=4 -> mat1(2, i) = n(i)+n(i)*4 %n = 1 2 3 4 5 6 7 8 9 mat2 = [1, 2, 3, 4, 5, 6, 7, 8, 9; %m=1 -> mat2(2, i) = n(i) 1, 4, 7, 10, 13, 16, 19, 25, 28; %m=2 -> mat2(2, i) = n(i)+n(i)*2-2 1, 5, 9, 13, 17, 21, 25, 29, 33; %m=3 -> mat2(2, i) = n(i)+n(i)*3-3 1, 6, 11, 16, 21, 26, 31, 36, 41] %m=4 -> mat2(2, i) = n(i)+n(i)*4-4 general description:
% i=1:n %mat1(m, i) = n(i)+n(i)*m , if m>1 % n(i)+1 , if m=1 %mat2(m, i) = n(i)+n(i)*m-m , if m>1 % n(i) , if m=1 i wrote code 2 loops, inquire if there method these results, without using loops. tried bsxfun , arrayfun, did not manage right result:
clear mat1 mat2 n=10; m=9; mat1 = ones(m, n); mat2 = ones(m, n); i=1:m j=1:n if i==1 mat1(i, j) = j+1; mat2(i, j) = j; elseif j ==1 mat1(i, j) = j+j*i; elseif i~=1 && j~=1 mat1(i, j) = j+j*i; mat2(i, j) = j+j*i-i; end end end thank you
my try:
n=10; m=4; mat1 = bsxfun(@(x,y) x*(y.*(y>1)+1)+(y==1), 1:n,(1:m)') mat2 = bsxfun(@(x,y) x*(y.*(y>1)+1)-(y>1).*y, 1:n,(1:m)') matlab loops matrix generator
No comments:
Post a Comment