How to create this patterned matrix?

7 views (last 30 days)
How do I create a matrix that looks like this?

Accepted Answer

Stephen23
Stephen23 on 7 Mar 2022
Edited: Stephen23 on 7 Mar 2022
N = 8;
M = toeplitz(0:N-1,[0,N:-1:1]);
M(N,:) = N:-1:0
M = 8×9
0 8 7 6 5 4 3 2 1 1 0 8 7 6 5 4 3 2 2 1 0 8 7 6 5 4 3 3 2 1 0 8 7 6 5 4 4 3 2 1 0 8 7 6 5 5 4 3 2 1 0 8 7 6 6 5 4 3 2 1 0 8 7 8 7 6 5 4 3 2 1 0

More Answers (2)

Davide Masiello
Davide Masiello on 7 Mar 2022
Edited: Davide Masiello on 7 Mar 2022
Generalizing for any nxn matrix
clear,clc
n = 9;
A = zeros(n);
for i = 1:n
A(i,i+1:n) = flip(i:n-1);
if i > 1
A(i,1:i) = flip(0:i-1);
end
end
which yields
A =
0 8 7 6 5 4 3 2 1
1 0 8 7 6 5 4 3 2
2 1 0 8 7 6 5 4 3
3 2 1 0 8 7 6 5 4
4 3 2 1 0 8 7 6 5
5 4 3 2 1 0 8 7 6
6 5 4 3 2 1 0 8 7
7 6 5 4 3 2 1 0 8
8 7 6 5 4 3 2 1 0
However, in your example, the row starting with 7 is missing. I am not sure whether that's intentional or just a typo.
In the first instance, the code above can be arranged to remove rows starting with a certain value.
  3 Comments
Burger King
Burger King on 7 Mar 2022
I didnt even realize it was "5 6 8". Thanks a lot man
Davide Masiello
Davide Masiello on 7 Mar 2022
Anytime! I guess you indeed wanted that row to be skipped. @Stephen's answer will do that very efficiently.

Sign in to comment.


Arif Hoq
Arif Hoq on 7 Mar 2022
Edited: Arif Hoq on 7 Mar 2022
try this:
x=[0,8,7,6,5,4,3,2,1];
A1=circshift(x,1);
A2=circshift(x,2);
A3=circshift(x,3);
A4=circshift(x,4);
A5=circshift(x,5);
A6=circshift(x,6);
A7=circshift(x,8);
Matrix=[x;A1;A2;A3;A4;A5;A6;A7]
Matrix = 8×9
0 8 7 6 5 4 3 2 1 1 0 8 7 6 5 4 3 2 2 1 0 8 7 6 5 4 3 3 2 1 0 8 7 6 5 4 4 3 2 1 0 8 7 6 5 5 4 3 2 1 0 8 7 6 6 5 4 3 2 1 0 8 7 8 7 6 5 4 3 2 1 0

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Tags

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!