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 件のコメント

Cedric
Cedric 2015 年 8 月 10 日
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?

サインインしてコメントする。

 採用された回答

John D'Errico
John D'Errico 2015 年 8 月 10 日

1 投票

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 件のコメント

Mike
Mike 2015 年 8 月 10 日
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!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeCreating and Concatenating Matrices についてさらに検索

質問済み:

2015 年 8 月 10 日

コメント済み:

2015 年 8 月 10 日

Community Treasure Hunt

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

Start Hunting!

Translated by