Subscripted assignment dimension mismatch.
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
hello
a=[0 1;0 0];
b=[0;1];
q1=10;
q2=1;
r=1;
N=3;
S(3)=1;
Q=[q1 q2;q2 q1];
for k=2:-1:0
K(k,:)=inv((b'*S(k+1)*b)+r)*b'*S(k+1)*a;
S(k,:)=(a'*S(k+1)*(a-b*K(k)))+Q;
end
Subscripted assignment dimension mismatch.
Error in Untitled452 (line 13)
S(k,:)=(a'*S(k+1)*(a-b*K(k)))+Q;
0 commentaires
Réponses (1)
Walter Roberson
le 15 Fév 2021
S(3)=1;
S did not exist before. The above is equivalent to
S = zeros(1,3);
S(1,3) = 1;
Then
Q=[q1 q2;q2 q1];
That is 2 x 2
S(k,:)=(a'*S(k+1)*(a-b*K(k)))+Q;
You are adding Q, a 2 x 2. You wil either get an error from size mismatches, or else you will get a 2 x 2 output. Unless, that is, the expression happens before the Q happens to calculate something that is 2 x 2 x something or 1 x 2 by something or 2 x 1 x something, in which case you would get 2 x 2 x something as the size of the right hand side.
This (probably) 2 x 2 output is to be assigned to S(2,:) . S is currently 1 x 3, so that is an assignment to S(2, 1:3) which requires the right hand side to be a scalar, or a vector that is 3 elements long. But the right hand side is 2 x 2.
If you had initialized S as zeros(1,4) then the 2 x 2 on the right hand side would be the correct number of elements, but it would be the wrong shape to assign to a 1 x 4 output location.
If you are going to calculate a 2 x 2 on the right hand side, then the place you designate on the left has to be 2 x 2 (or 1 x 2 x 2, or 2 x 1 x 2, or other variations such as 2 x 1 x 1 x 1 x 1 x 2 -- the non-scalar dimensions have to match 2 x 2.)
0 commentaires
Voir également
Catégories
En savoir plus sur Entering Commands 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!