|
|
Zählvariable im Variablennamen |
|
tommylabamba |

Forum-Fortgeschrittener
|
 |
Beiträge: 87
|
 |
|
 |
Anmeldedatum: 08.08.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 12:20
Titel: Zählvariable im Variablennamen
|
 |
Ich möchte einem Parameter t einen variablen Namen vergeben mit einer Schleife.
for i=1:1:10
t... = 3;
end;
Dabei soll die Schleife den Parameter
t1
t2
t3
... usw.
erzeugen.
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 12:56
Titel:
|
 |
Hallo,
das ist zwar mit EVAL möglich, aber in der Regel sehr unzweckmäßig. Besser geeignet ist hier meist ein Cell Array:
Grüße,
Harald
|
|
|
tommylabamba |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 87
|
 |
|
 |
Anmeldedatum: 08.08.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 13:07
Titel:
|
 |
Danke Harald.
Hab nun die Timer mit der Schleife erstellt und enum.
for i=1:1:Anzahl
for n=1:1:Pos_Timer_L(1,i)
eval(['t_' num2str(i) '_Pos' num2str(Pos_Timer{i}(1,n)) '=timer']);
end;
end;
Nun aber möchte ich aber zu den erstellten Timern die Laufzeiten setzen.
Diese befinden sich in einem Cell Namens 'Laufzeiten'.
Der Timer soll abwärts oder aufwärts zählen. Wichtig dabei ist das er die Werte aus der Cell liest und sich damit initialisiert.
Welcher der Parmeter beim Timer T=Timer('PropertyName1, PropertyName2) ist nun für die Laufzeit zuständig? Und wie lese ich das am besten in einer Schleife aus und bringe es zu den Timern?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 15:19
Titel:
|
 |
Hallo,
mir ist nicht klar, warum du dir hier unbedingt EVAL antun willst.
Was soll mit dem Timer erreicht werden? Soll eine Funktion mit einer Verzögerung ausgeführt werden? Einmalig oder wiederholt? Die Eigenschaften von Timer-Objekten sind doch alle dokumentiert.
Grüße,
Harald
|
|
|
tommylabamba |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 87
|
 |
|
 |
Anmeldedatum: 08.08.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 18:41
Titel:
|
 |
Es geht nicht darum ein cell mit dem Wert 3 zu erzeugen, sondern um die Variablen t1...t10 mit Wert 3 zu erzeugen. Dabei soll der variable Parametername in einer for-Schleife erzeugt werden.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 19:07
Titel:
|
 |
Hallo,
dass das deine ursprüngliche Absicht war, ist mir schon klar.
Ich sehe nur insbesondere in diesem Fall keinen Vorteil von 10 verschiedenen Variablen gegenüber einem Cell Array mit 10 Elementen, aber gravierende Nachteile: überfrachteter Workspace, schwieriger zu schreibender und zu debuggender Code "dank" EVAL-Statements.
Grüße,
Harald
|
|
|
tommylabamba |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 87
|
 |
|
 |
Anmeldedatum: 08.08.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 19:12
Titel:
|
 |
ich kann doch keine Timer in einem Cell packen oder?
in diesem Fall erzeuge ich Timer mit verschiedenen Variablennamen auf einem Schlag mit der for-Schleife.
Ich würde gerne diese Timer aber in einer Matlab-function erzeugen um sie nicht alle im Workspace zu haben. Aber das geht doch nicht oder?
Wenn das geht, dann wie?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 19:35
Titel:
|
 |
Hallo,
Zitat: |
ich kann doch keine Timer in einem Cell packen oder? |
Aber sicher:
Zitat: |
Ich würde gerne diese Timer aber in einer Matlab-function erzeugen um sie nicht alle im Workspace zu haben. Aber das geht doch nicht oder? |
Auch da spricht nichts dagegen. Deinen Code oder den oben genannten in eine Funktion packen, fertig. Schwierig wird es nur, wenn du danach noch mit den Timer-Objekten arbeiten möchtest (anhalten, neu starten, umdefinieren etc.). Da ist es nützlich, die Timer-Variablen zur Verfügung zu haben. Und ich fände es schön, die in einer statt in 10 Variablen zu haben
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 20:00
Titel:
|
 |
Hallo tommylabamba,
Harald hat vollkommen recht. Die Handles der Timer sind in einem Cell oder Struct-Array viel besser aufgehoben als in Variablen, in deren Namen ein Index versteckt ist.
Eine sehr einfache und sehr wichtige Regel: Es gibt immer eine andere und vor allem bessere Lösung als EVAL.
Wann immer man also meint, EVAL wäre notwendig oder nützlich, ist dies ein sicheres Zeichen dafür, dass man eine ineffiziente und indirekte Idee verfolgt.
Ausnahme: Umwandlung eines symbolischen in einen numerischen Ausdruck.
Beispiele findest Du hier im Forum zu hunderten.
Gruß, Jan
|
|
|
tommylabamba |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 87
|
 |
|
 |
Anmeldedatum: 08.08.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 20:25
Titel:
|
 |
Schönen Dank.
Allerdings wenn ich es ins Cell packe mit dem Code:
for i=1:1:Anzahl
for n=1:1:Pos(1,i)
t{i}(n,1) = timer;
end;
end;
Dann packt er mir die Timer in das Cell. Wenn Anzahl = 2 ist, und es sind im Pos 1=10 und in Pos=9 Timer, dann steht im Cell:
10x1 timer 9x1 timer
Allerdings wenn ich jetzt in den Timer reingehe, dann kommt Fehlermeldung:
Obj must be a 1-by-1 timer object
Ich hätte die Timer lieber in einer Matrix mit 2 Spalten, erste Spalte 10 timer, 2 Spalte 9 timer.
1x1 timer 1x1 timer
1x1 timer 1x1 timer
... ...
1x1 timer
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 20:54
Titel:
|
 |
Hallo tommylabamba,
Zitat: |
Allerdings wenn ich jetzt in den Timer reingehe, dann kommt Fehlermeldung: ... |
Bitte poste den Code, damit klar wird, was "in den Timer reingehen" bedeutet. Wahrscheinlich fehlt nur ein Klammerpaar oder eine geschwungene statt der runden Klammer.
Zitat: |
Ich hätte die Timer lieber in einer Matrix mit 2 Spalten, erste Spalte 10 timer, 2 Spalte 9 timer. |
Eine Matrix ist laut Definition immer rechteckig. Deshalb müssen alle Spalten die gleiche Anzahl von Zeilen haben. Wenn Du unterschiedlich lange Vektoren speichern möchtest, ist ein CELL Array dafür geeignet.
Gruß, Jan
|
|
|
tommylabamba |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 87
|
 |
|
 |
Anmeldedatum: 08.08.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 21:05
Titel:
|
 |
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.09.2012, 22:14
Titel:
|
 |
Hallo,
für Parameter = 2 macht der folgende Code nicht viel Sinn, insbesondere nicht die Indizierung in ein Cell Array.
Ich würde die Timer als geschachtelte Cell Arrays anlegen:
Grüße,
Harald
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|