Filter löschen
Filter löschen

Doubt about matrices mxm

1 Ansicht (letzte 30 Tage)
Pedro Guevara
Pedro Guevara am 18 Jul. 2018
Kommentiert: James Tursa am 26 Jul. 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 Kommentar
Stephen23
Stephen23 am 18 Jul. 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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

James Tursa
James Tursa am 18 Jul. 2018
Bearbeitet: James Tursa am 18 Jul. 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 Kommentare
Pedro Guevara
Pedro Guevara am 26 Jul. 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 am 26 Jul. 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);

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte


Version

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by