|
bumbumquietsch* |

Forum-Fortgeschrittener
|
 |
Beiträge: 55
|
 |
|
 |
Anmeldedatum: 17.10.11
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 28.10.2011, 14:18
Titel: Dynamischer Struct
|
 |
Servus Leute
bin gerade am Programm Code schmälern und hab mir einen dynamischen (variablen) Programmablauf überlegt. Ich hab eine For-Schleife gerneiert, die bis zu einem maximalen Wert geht der sich aus einer gegebenen Matrix bestimmt. Danach wird in dieser Schleife eine bestimme Anzahl von Indizes gesucht. ich generiere mit Hilfe von
eine dynamische Anzahl von variablen, in denen mit Hilfe von "eval" die Werte geschrieben werden die ich brauche.
Nun soll die werte in einem Dynamischen Struct gespeichert werden.
Das heißt: Auf ist meine allgemeine structvariable. Und in diese sollen die einzelnen werte aus auf1, auf2, auf3 usw. gepsichert werden.
ich habe schon
versucht, aber da meckert er. Ist vielleicht nur ne kleinigkeit. Wenn einer helfen kann wäre ich sehr dankbar Hier ist mein Code:
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 28.10.2011, 15:09
Titel:
|
 |
Hallo,
die Klammern anders setzen reicht:
Damit wird der Ausdruck in den Klammern vorrangig ausgewertet.
Das EVAL in deinem anderen Code ist übrigens überflüssig, wenn du deine Struktur direkt belegst.
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 28.10.2011, 15:18
Titel: Re: Dynamischer Struct
|
 |
|
 |
|
Hallo bumbumquietsch*,
Zitat: |
ich generiere mit Hilfe von
eine dynamische Anzahl von variablen, in denen mit Hilfe von "eval" die Werte geschrieben werden die ich brauche. |
Das ist grundsätzlich eine schlechte Idee. Um genau zu sein: Eine besonders schlechte.
Matlab kann Schleifen sehr schnell bearbeiten, wenn man es läßt. Zwischendurch Variablen dynamisch zu erzeugen ist eine ectreme Bremse:
7800 mal langsamer. Und dabei ist das noch ein trviales Beispiel.
Das weitaus größere Problem ist das Debuggen: Da man bei der dynamischen Erzeugung von Variablen beim Lesen des codes den Ursprung einer Variablen nicht mehr sehen kann, Fallen Fehler dabei kaum auf. Auch Matlab selbst ist davon verwirrt, wenn z.B. ein Funktionsname während des Programmlaufs von einem Variablennamen überschrieben wird:
Wenn man das aber im Command-Window laufen läßt (ohne "function ..."), wird beide Male der Vektor angezeigt. Gruselig.
Weit besser als mehrere Variablen dynamisch per EVAL zu erzeugen ist entweder die Variablen in ein CELL-Array zu schreiben, oder sie per "dynamic field names" als Felder in einem Struct zu erzeugen.
Gruß, Jan
|
|
|
bumbumquietsch* |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 55
|
 |
|
 |
Anmeldedatum: 17.10.11
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 29.10.2011, 16:11
Titel:
|
 |
Hey Jan, hey Harald,
dnake für die Nette Hilfe, funktioniert natürlich richt gut Das mit dem Eval Befahl wusste ich nicht, so funktioniert es natürlich auch!
Jetzt hab ich noch eine Frage für mein weiteres vorgehen:
Ich würde gerne die Länge der Matrix bestimmen und sie durch einen Gesamt wert teilen, den ich vorher definiert habe. Und diese Werte sollen danach in meinen struct geschrieben werden. ich hab das ganze folgendermaßen aufgebaut, jedoch werden die structs immer mit 0 belegt:
Er generiert mir meinen Struct richtig, schreibt aber immer die Falschen Werte in die matrizen. Er bringt "??? Warning: Struct field assignment overwrites a value with class "double"
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 29.10.2011, 23:29
Titel:
|
 |
Hallo bumbumquietsch*,
Was genau soll diese Zeile bewirken:
Wie kann der Struct richtig generiert werden, wenn das Programm mit einer Fehlermeldung abbricht? In welcher Zeile erscheint der Fehler?
Gruß, Jan
|
|
|
throttle |

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 23.06.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.07.2016, 11:44
Titel:
|
 |
Hallo,
möchte das Thema nochmal ausbuddeln, da ich gerade ein ähnliches Problem habe und Jan zustimme, dass es wünschenswert ist, die FAQ um dieses Problem zu erweitern.
Ich wünsche mir ebenfalls einen dynamischen Struct, bei dem sich die Anzahl der zu erzeugenden Felder aus einer eingelesenen Datei ergibt. Es sind zwar nicht viele Felder, aber da die Anzahl schwankt werden die Daten sonst nicht korrekt zugeordnet.
Aussehen sollte dies dann so:
Werte.P1
Werte.P2
Werte.P3
...
Die Zuordnung der Daten erfolgt dann in einer nachfolgenden Schleife.
Ist eine derartige Strukturierung auch ohne Funktion möglich, also einfach ins Skript zu integrieren?
Blicke bei bumbumquietsch*s Lösung nicht ganz durch, wie das mit den Variablen am Ende aussehen soll und wie die Eingangsdaten aussehen.
Für mich wäre es hilfreich, wenn hierzu nochmal jemand eine abstrakte Lösung darstellen könnte.
Viele Grüße
throttle
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 11.07.2016, 18:56
Titel:
|
 |
Hallo,
hier die Kurzfassung:
Grüße,
Harald
|
|
|
throttle |

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 23.06.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.07.2016, 22:17
Titel:
|
 |
|
|
|
|
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.
|
|