How to create a checkerboard matrix without inbuilt function.
Mostra commenti meno recenti
I just want to write this matrix, but want to do it using for loops
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
8 Commenti
Riley Smith
il 12 Set 2017
Stephen23
il 12 Set 2017
@Riley Smith: so try both of them. What is stopping you from trying things out? MATLAB does not explode if your first attempt does not work.
Adam
il 12 Set 2017
This is one of those problems where there is a vast number of different ways to try it. Many that give the right answer and many that give the wrong answer, but command line testing is free. My first attempt yielded the wrong answer as I forgot that the value at the end of a column is equal to that at the start of the next column. But a little tweak soon fixes those problems and experimenting is fun and good for learning.
James Tursa
il 12 Set 2017
If you get stuck, or just want to see how others have done this:
Rik
il 12 Set 2017
Also, the criterion restricting the use of builtins makes it harde to answer this. It is very difficult to define what counts as a builtin and what doesn't, as that quickly devolves into not being able to use Matlab at all (+ is a builtin as well).
You can also use
abs(sin(...)) or abs(cos(...))
with the proper arguments.
James Tursa
il 12 Set 2017
Using the sin function for this would be a sin ...
I had missed this comment ... ;-)
It's one of the rare cases where using a cos would be a sin too ..
0.5-(-1).^((1:n)+(1:n).')/2
or
a = 1 : n ;
a + a.' == 1
Risposta accettata
Più risposte (4)
Sangam K
il 25 Nov 2017
%Hope this helps you.
function a = checkerboard(n)
a = zeros(n);
for i = 1:n
for j = 1:n
if (i == j)
a (i, j) = 0;
elseif (mod(j, 2) == 0) && (mod(i,2) == 0)
a(i,j) = 0;
elseif (mod(j, 2) == 0) || (mod(i,2) == 0)
a(i,j) = 1;
end
end
end
end
1 Commento
Nitika Gupta
il 2 Giu 2019
thanks
Jan Siegmund
il 21 Mag 2020
For an even sized checkerboard:
rows = 6;
cols = 4;
normal = repmat(eye(2,'logical'),[rows/2 cols/2]);
% or
inverted = repmat(~eye(2,'logical'),[rows/2 cols/2]);
Mendi
il 5 Set 2020
It is more natural to use modulus on meshgrid:
[iX,iY] = meshgrid(1:8,1:8);
Mask=mod(iX+iY,2);
2 Commenti
Bruno Luong
il 5 Set 2020
One liner variant
mod((1:8)+(1:8)',2)
Mendi
il 6 Set 2020
Yeap. The one liner is better.
Bruno Luong
il 5 Set 2020
Modificato: Bruno Luong
il 5 Set 2020
Two more methods
toeplitz(mod(0:7,2))
or for even size
kron(ones(4),[0 1;1 0])
Categorie
Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!