フィルターのクリア

How to create a large matrix using another matrix

5 ビュー (過去 30 日間)
Petros Tsitouras
Petros Tsitouras 2020 年 5 月 30 日
コメント済み: Petros Tsitouras 2020 年 6 月 1 日
Hello everyone, I want to make a large matrix (10^7 x 10^7) but it needs to have the following matrix being repeated around its main diagonal.
a=4;
A=[1 0 a+1 0;
a+2 2 0 a+1;
0 a+2 3 0;
0 0 a+2 4];
As you can see it is a main diagonal with 1:10^7 and 1 row lower repeating the number 6 and 2 rows higher repeating the number 5.
Everything I have tried turns out to be huge in terms of memory and unable to be performed like that. I suppose the trick is by somehow making use of a sparse matrix, but I cannot get it to work properly.
Thanks a lot in advance!
  8 件のコメント
Walter Roberson
Walter Roberson 2020 年 6 月 1 日
Your original request shows the a+2 below the diagonal, so anything that ends up with the 6 above the diagonal is a wrong approach ;-)
The approach I used of constructing columns instead of rows has the advantage of not needing to transpose Acom, and so is more efficient.
Petros Tsitouras
Petros Tsitouras 2020 年 6 月 1 日
Then I will have to aggree with you and tell you a huge thanks once more!! Have a good day!

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

採用された回答

Walter Roberson
Walter Roberson 2020 年 5 月 30 日
編集済み: Walter Roberson 2020 年 6 月 1 日
  4 件のコメント
Petros Tsitouras
Petros Tsitouras 2020 年 5 月 30 日
Got it! Thanks a alot for the help! Is there anyway to upscale this to a 10^7 x 10^7 matrix?
Walter Roberson
Walter Roberson 2020 年 5 月 30 日
a=4;
N=1E7;
Adiag=(1:N).';
A1=ones(N,1)*(a+2);
A2=ones(N,1)*(a+1);
Acom=[A2, Adiag, zeros(N,1), A1];
B=spdiags(Acom,-1:2,N,N);

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeOperating on Diagonal Matrices についてさらに検索

製品


リリース

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by