How can I iterate across the opposite diagonal?

7 ビュー (過去 30 日間)
Karen Smith 2021 年 12 月 24 日

Hi everyone, I am new to matlab and trying to build a matrix in it. I am wanting to know how to iterate across the other diagonal, opposite to where the 6's are. If anyone can do this with a similar for loop, all help would be appreciated. Thank you!
N1=2;
N2=2;
nband=1;
n= (N1* N2)*2*nband;
eps_s=1;
eps_sp=2;
eps_spp=3;
tp=4;
tps=5;
HM = zeros(n);
for ii = 1:n
HM(ii,ii) = 6; % (ii,ii) = eps_s
HM(ii,ii+1) = 4;
HM(ii+1,ii) = 4
end
3 件のコメント表示非表示 2 件の古いコメント
Torsten 2021 年 12 月 25 日
If you set
for ii = 1:n
HM(ii,n+1-ii) = 6;
end
you set the opposite diagonal to 6.
For ii=1, you set HM(1,n) = 6.
For ii=2, you set HM(2,n-1) = 6.
...
For ii=n, you set HM(n,1) = 6.

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

回答 (3 件)

Image Analyst 2021 年 12 月 25 日
HM = fliplr(HM);
or else here is one way:
N1=2;
N2=2;
nband=1;
n= (N1* N2)*2*nband;
eps_s=1;
eps_sp=2;
eps_spp=3;
tp=4;
tps=5;
HM = zeros(n);
for ii = 1:n
col = n-ii+1;
if col <= n && col >= 1
HM(ii, col) = 6; % (ii,ii) = eps_s
end
col = n-ii+2;
if col <= n && col >= 1
HM(ii, col) = 4;
end
col = n-ii;
if col <= n && col >= 1
HM(ii, col) = 4;
end
end
HM
0 件のコメント表示非表示 -1 件の古いコメント

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

Sean de Wolski 2021 年 12 月 25 日
full(flip(gallery('tridiag', 8, 4, 6, 4), 2))
ans = 8×8
0 0 0 0 0 0 4 6 0 0 0 0 0 4 6 4 0 0 0 0 4 6 4 0 0 0 0 4 6 4 0 0 0 0 4 6 4 0 0 0 0 4 6 4 0 0 0 0 4 6 4 0 0 0 0 0 6 4 0 0 0 0 0 0
0 件のコメント表示非表示 -1 件の古いコメント

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

DGM 2021 年 12 月 25 日

You can also do:
HM = fliplr(toeplitz([6 4 zeros(1,7)]))
HM = 9×9
0 0 0 0 0 0 0 4 6 0 0 0 0 0 0 4 6 4 0 0 0 0 0 4 6 4 0 0 0 0 0 4 6 4 0 0 0 0 0 4 6 4 0 0 0 0 0 4 6 4 0 0 0 0 0 4 6 4 0 0 0 0 0 4 6 4 0 0 0 0 0 0 6 4 0 0 0 0 0 0 0
That said, it's unclear whether you're actually intending for the output to be 8x8 or 9x9. You assert n=8, and you preallocate an 8x8 array, but your indexing forces the array to be expanded to 9x9. Consequently, you're missing a 6 in the corner element. If the desired output is only 8x8, then that's as simple as changing the number of zeros.
HM = fliplr(toeplitz([6 4 zeros(1,6)]))

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

Community Treasure Hunt

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

Start Hunting!

Translated by