Effacer les filtres
Effacer les filtres

Doubt about matrices mxm

1 vue (au cours des 30 derniers jours)
Pedro Guevara
Pedro Guevara le 18 Juil 2018
Commenté : James Tursa le 26 Juil 2018
Good afternoon.
I am new to the forum and new to programming with matlab, and I request your help with a topic:
I have the following code lines:
M_Kele_G=inv(M_Trans)*M_Kele*M_Trans;
M_Kele_global =['MK_G',int2str(f),' = M_Kele_G'];
eval(M_Kele_global)
where the variable "f" has an initial value of 1, it is a variable that grows one unit and that is contained in a for cycle. The result shown for a certain data entry:
MK_G1 =
500 0 0 -500 0 0
0 120 120 0 -120 120
0 120 160 0 -120 80
-500 0 0 500 0 0
0 -120 -120 0 120 -120
0 120 80 0 -120 160
If I in the matlab editor add the following line of operation: MK_G1 + MK_G1 matlab does the correct operation by adding both matrices, however I require some code that allows me to operate different matrices that vary according to the value of "f" , something like the following multiplication of matrices:
'MK_G',int2str(f) * 'MK_G',int2str(f)
I would appreciate your help in this regard. Thank you very much.
  1 commentaire
Stephen23
Stephen23 le 18 Juil 2018
"I am new to the forum and new to programming with matlab, and I request your help..."
The best advice you will get is to avoid creating or accessing variable names dynamically. Dynamically creating or accessing variable names is how beginners force themselves into writing slow, complex, buggy code (like you have). You can easily avoid doing this by using indexing.

Connectez-vous pour commenter.

Réponse acceptée

James Tursa
James Tursa le 18 Juil 2018
Modifié(e) : James Tursa le 18 Juil 2018
See the following link:
In short, you should rewrite your code to use cell arrays or nD arrays instead of using the variable naming scheme you are currently doing, which as you can already see makes it difficult to write good code.
E.g., instead of this mess:
for i=1:N
eval(['MyMatrix' num2str(i) '= MyFunction(MyVariable' num2str(i) ');']);
end
You can do something like this instead:
for i=1:N
MyMatrix{i} = MyFunction(MyVariable{i});
end
A lot nicer!
  2 commentaires
Pedro Guevara
Pedro Guevara le 26 Juil 2018
Thank you all for the reply. I already solved, in part, the problem I had, but now I have another. I have this line of code:
prueba=['MK_G', num2str(px(j,1)),'(4:6,4:6)'];
but I require, in some way, that the intervals of the matrix that I am evaluating (in this case 4: 6,4: 6) are in some way variable. I thank you for your collaboration with this new problem.
James Tursa
James Tursa le 26 Juil 2018
Again, don't name variables dynamically like MK_G1, MK_G2, etc. Instead, use cell arrays or nD arrays. E.g., with cell arrays you could just to this if you wanted to get at the contents of the variable:
x = something
y = something
prueba = MK_G{px(j,1)}(x:y,x:y);

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by