Creating a super diagonal matrix.

Please what's a neat way of creating a matrix that looks like this?
[1 2 3 4 5 0 0 0 0 0; 0 1 2 3 4 5 0 0 0 0; 0 0 1 2 3 4 5 0 0 0; 0 0 0 1 2 3 4 5 0 0; 0 0 0 0 1 2 3 4 5 0]
Thank you.

1 Comment

Is it just a small example or is it the real matrix that you need to build? If it is a small example, what will be the size of the real one, and what is the size of the non-zero band?

Sign in to comment.

 Accepted Answer

John D'Errico
John D'Errico on 10 Aug 2015
A gazillion ways. A few suggestions...
1. Simple is to create this as a circulant matrix. I've got a tool for that on the file exchange as I recall.
2. Or, use spdiags. This has the virtue of making it a sparse matrix.
3. Or create it as the sum of multiple diagonal matrices, each built using diag.
4. A matrix with the pattern you show can be built with a call to sparse, where you need to create a list of non-zero elements, and the row and column indices for each. This can be easier than it sounds. Again, you get a sparse result.
5. The simple pattern shown can easily enough be built using meshgrid and a test, possibly with a call to tril or triu afterwards.
Why not play with some or more of the ideas I posed above? This is the way to learn, by playing around with a goal in mind.

1 Comment

It's a small example, the matrix I'm trying to build is a 501 x 501 matrix with the non-zeros being 1:1:100. I'll go through your suggestions to see which I can use. Thanks John!

Sign in to comment.

More Answers (0)

Categories

Asked:

on 10 Aug 2015

Commented:

on 10 Aug 2015

Community Treasure Hunt

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

Start Hunting!