Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

how to creating matrix h 4x2 with some rules

Asked by Noru on 21 Mar 2013

I have some trouble when creating matrix 4x2 with rules like below. the first column are integer and the other column are random number. I already create the syntax below.

for ii = 1:8,
      nilai = mod(ii,2);
  if  nilai == 0
      x(ii) = 0.95 + (1.05-0.95)*x(ii);
  elseif nilai ~= 0
      x(ii) = round(3 + (30-3)*x(ii));
  elseif nilai ~= 0
      x(ii) = 0.01 + (0.055-0.01)*x(ii);
  else
      x(ii) = 1.0 + (1.15-1.0)*x(ii);
  end
 end
x = reshape(x,4,2)';

but the result are

??? Error using ==> reshape
To RESHAPE the number of elements must not change.

anyone can help me with this problem..? any solutions are very welcome..

thank you.

0 Comments

Noru

Products

No products are associated with this question.

2 Answers

Answer by the cyclist on 21 Mar 2013
Accepted answer

What is the shape of x before you start? It seems that it is probably not an 8-element array, so the reshape fails.

3 Comments

Noru on 21 Mar 2013

the shape of x that i want to create is an 8 element array, then i want to reshape those 8 element array become 4x2 matrix with integer number in the first column, but i have some problem when define loop (for)

the cyclist on 21 Mar 2013

You did not answer my question. What is the shape of x BEFORE this loop?

As you can see from Image Analyst's answer, there is no problem if x is 1x8 before your loop.

Noru on 27 Mar 2013

i think i ask the wrong question..

thanks for your help.. :))

the cyclist
Answer by Image Analyst on 21 Mar 2013

I got a different error message due to x not being predefined and your new x(ii) depends on your old x(ii). When I predefined x, it ran with no errors:

x = zeros(1, 8);
for ii = 1:8
	nilai = mod(ii,2);
	if  nilai == 0
		x(ii) = 0.95 + (1.05-0.95)*x(ii);
	elseif nilai ~= 0
		x(ii) = round(3 + (30-3)*x(ii));
	elseif nilai ~= 0
		x(ii) = 0.01 + (0.055-0.01)*x(ii);
	else
		x(ii) = 1.0 + (1.15-1.0)*x(ii);
	end
end
x = reshape(x,4,2)'

In the command window:

x =
      3     0.95    3    0.95
      3     0.95    3    0.95

2 Comments

Noru on 21 Mar 2013

now i already done create a matrix like you do, but i want to make the value of the 3rd column like 2nd and 4th(non integer number) like below

x =
    8      0.67    0.32    0.76
    14     0.49    0.21    0.53

do you have any solution..?

Image Analyst on 21 Mar 2013
% make the value of the 3rd column like 2nd 
x(:,3) = x(:,2);
% make the value of the 3rd column like 4th
x(:,3) = x(:,4);
Image Analyst

Contact us