2×0 empty double matrix

12 vues (au cours des 30 derniers jours)
sxh
sxh le 4 Sep 2024
Commenté : Voss le 5 Sep 2024
trying to calculate a function with matrix arguments and matrix output: Question 1: is the following code the right way to do it? Question 2: why is SAB21 returning " 2×0 empty double matrix"?
A = magic(4)
A = 4x4
16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
S = anti_eye(4)
S = 4x4
0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
S = star (S, A) %should return A
SAB11 = 2x2
11 5 2 16
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
SAB12 = 2x2
10 8 3 13
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
SAB21 = 2x0 empty double matrix
SAB22 = 2x2
6 12 15 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
S = 4x4
11 5 10 8 2 16 3 13 0 0 6 12 0 0 15 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
function SAB = star(SA,SB)
% Redheffer Star Product
SAB11 = SA (1:2,1:2,:) + SA (1:2,3:4,:) *((eye(2) - SB (1:2,1:2,:)* SA (3:4,3:4,:))^(-1)) *SB (1:2,1:2,:) *SA (3:4,1:2,:)
SAB12 = SA (1:2,3:4,:) *((eye(2) - SB (1:2,1:2,:) *SA (3:4,3:4,:))^(-1)) *SB(1:2,3:4,:)
SAB21 = SB (3:4,1:2,:) *((eye(2) - SA (3:4,3:4,:) *SB (1:2,1:2,:))^(-1)) *SA(3:4,2:1,:)
SAB22 = SB (3:4,3:4,:) + SB (3:4,1:2,:) *((eye(2) - SA (3:4,3:4,:) *SB (1:2,1:2,:))^(-1)) *SA (3:4,3:4,:) *SB (1:2,3:4,:)
SAB (1:2, 1:2 ,:) = SAB11;
SAB (1:2, 3:4 ,:) = SAB12;
SAB (3:4, 2:1, :) = SAB21;
SAB (3:4, 3:4, :) = SAB22;
end
function ans = anti_eye(n)
% anti Identity matrix
flipud(eye(n));
end

Réponse acceptée

Voss
Voss le 4 Sep 2024
Modifié(e) : Voss le 4 Sep 2024
"why is SAB21 returning " 2×0 empty double matrix"?"
Because the expression 2:1 evaluates to an empty vector.
SAB21 = SB (3:4,1:2,:) *((eye(2) - SA (3:4,3:4,:) *SB (1:2,1:2,:))^(-1)) *SA(3:4,2:1,:)
% ^^^
2:1
ans = 1x0 empty double row vector
I guess you meant 2:-1:1, or simpler, [2 1]:
2:-1:1
ans = 1x2
2 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
[2 1]
ans = 1x2
2 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Example:
M = magic(4)
M = 4x4
16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
M(3:4,2:1,:)
ans = 2x0 empty double matrix
M(3:4,[2 1],:)
ans = 2x2
7 9 14 4
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
And by the way, the colon indexing in the third dimension, e.g.:
SA(3:4,[2 1],:)
% ^^
is not necessary anywhere in the code because all the arrays are two-dimensional (i.e., matrices). That is, you can just write
SA(3:4,[2 1])
etc.
  2 commentaires
sxh
sxh le 5 Sep 2024
Sharp eyes Voss! Many thanks
Voss
Voss le 5 Sep 2024
You're welcome!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by