|
AnnePanne |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.10.2008, 16:28
Titel: Variablen erneuern
|
|
|
|
|
Hallo,
meine Frage ist möglicherweise ganz simpel zu beantworten, aber google kanns nicht...
Also: Ich möchte eine Monte-Carlo-Simulation eines Simulink Modells machen. Implementiert habe ich das durch immer erneutes Starten des Modells mit dem Befehl sim (for-Schleife). Die Daten, die über den to-workspace-block zurückgegeben werden, liegen in einem struct, und werden während der Laufzeit gleich weiterverarbeitet - ich muss also permanent drauf zugreifen.
Mein skript soll nun aber nur ganz oben explizit Usereingaben verlangen, d.h. im Programmtext selbst soll nichts variables mehr stehen.
Ich weise also (innerhalb des user-inputs) einer Variablen "vektor" den Datenvektor zu, der im struct steht, auf den ich zugreifen will (in meinem Fall also: vektor=weite.signals.values falls das wichtig ist).
Wenn ich jetzt aber innerhalb meiner simulations-for-schleife auf vektor(i) zugreife erhalte ich (natürlich) immer den Wert, den er ganz am Anfang hatte. Denn selbst wenn die Simulation den Vektor "weite.signals.values" neu gefüllt hat, gilt das ja für den Vektor "vektor" noch nicht.
Meine Frage also: Gibt es irgendeinen Befehl in Matlab, der das erneuern der Variable "vektor" ermöglicht (ohne das diese Gespeichert im Workspace liegt, sie ist temporär...)? Ich will dabei nicht auf den Namen im Struct zugreifen müssen.
Danke schonmal,
Matlab-Newbee AnnePanne
|
|
|
|
|
Bijick |
Ehrenmitglied
|
|
Beiträge: 914
|
|
|
|
Anmeldedatum: 18.06.07
|
|
|
|
Wohnort: Nürnberg
|
|
|
|
Version: R2006b, R2008b
|
|
|
|
|
|
Verfasst am: 15.10.2008, 18:13
Titel:
|
|
Hallo AnnePanne,
wahrscheinlich habe ich Deinen Funktionsablauf noch nicht richtig verstanden. Ich skizziere mal den Ablauf, wie ich ihn verstanden habe:
Mein (wohl zu simpler) Vorschlag wäre, die Zeile
nach der Simulation zu wiederholen.
Beschreib doch mal genauer, welche Variabeln du wann und wo hast und brauchst. Und was genau ist der "Name" im struct, auf den du nicht zugreifen willst (Beispiel)?
Herzliche Grüße
Bijick
_________________
>> why
|
|
|
AnnePanne |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.10.2008, 08:50
Titel: AW: Variablen erneuern - vielleicht mit Pointern?
|
|
|
|
|
Hallo Bijick,
klar würde
die Variable Vektor erneuern. Aber dann kann ich auch gleich statt "vektor" eben weite.signals.values schreiben. Das will ich vermeiden, weil der name des to-workspace-blocks sich von mc-simulation zu mc-simulation verändern wird, und ich am code nichts mehr drehen will - eigentlich.
Alles was ich ändern will, bei neuen Blöcken ist der obere Teil des von dir gut interpretierten Codes:
oder eben zum Beispiel
Fix bleiben soll dann der untere Teil
Alles in allem ist es nicht überlebenswichtig. Die Simulation läuft mit genau deiner zusätzlichen Programmzeile - aber es ist einfach nicht schön. Irgendwie unsauber halt, weil nicht wiederverwertbar (oder nur sehr schlecht).
Alles was ich oben abfrage könnte ich zum Beispiel auch über einen Userdiaglog als Eingabe fordern - der Anwender soll es für seinen Zweck dann nutzen können, ohne den Programmtext angucken zu müssen.
Letztlich suche ich also was wie
was so aber nicht funktioniert. ;)
Hab grad ne Idee:
Grundsätzlich könnte man das mit Pointern lösen (wenn "vektor" nen Pointer wäre, wäre ja jede Aktualisierung der Inhalte transparent). Gibts das in Matlab? Wenn ja, wie baue ich einen und wie greife ich auf Inhalte zu? Wie in c?
Grüße
Anne
edit by steve: Ich hab die Formatierung mal verbessert ;)
|
|
|
AnnePanne |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.10.2008, 08:52
Titel: schlecht formatiert
|
|
Hi,
ich nochmal,
sorry für die schlechte Formatierung des Beitrags oben - ich arbeite dran...
AnnePanne
|
|
|
Bijick |
Ehrenmitglied
|
|
Beiträge: 914
|
|
|
|
Anmeldedatum: 18.06.07
|
|
|
|
Wohnort: Nürnberg
|
|
|
|
Version: R2006b, R2008b
|
|
|
|
|
|
Verfasst am: 16.10.2008, 09:53
Titel:
|
|
Hallo AnnePanne,
vielleicht sind dann dynamische Feldnamen etwas für Dich. Die Struktur der Variablen müsste aber dafür etwas erweitert werden. Wenn ich Dich richtig verstehe, soll der Bestandteil 'weite' des Namens variabel sein, eventuell auch 'signals' und 'values'. Ganz ohne Veränderung des Codes geht es nicht, aber dafür wäre er dann allgemeingültig.
Dafür müsste man (in der Simulation) die struct-Variable 'weite' zu einem Feld eines neuen structs machen:
Dann sieht der Ablauf so aus:
Wäre das machbar? Pointer sind glaub ich nicht vorgesehen. Eine Notlösung wäre immer noch eval. Damit kann man auch im Vorspann den Namen der Variable auswählen und dann unten ansprechen. Die dynamischen Feldnamen sind aber in jedem Fall sicherer.
Herzliche Grüße
Bijck
_________________
>> why
|
|
|
AnnePanne |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.10.2008, 10:45
Titel: Variablen erneuern
|
|
Hallo Bijick,
entweder hab ich dich nicht richtig verstanden, oder auch das löst mein Problem nicht. Verstehe ledier auch nicht richtig, was daran besser ist, als einfach "vektor" zu erneuern nach jeder Simulation (weil beides Eingreifen in den Programmtext bedeuted).
Eval tuts aber jetzt ganz gut. Ist sicher nicht elegant, aber zweckmäßig (und mein Betreuer sagt, ich soll meine Energie jetzt mal wieder in die Simulation selbst stecken ;)!
Vielen Dank also für deine Hilfe!
LG
AnnePanne
|
|
|
AnnePanne |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.10.2008, 10:50
Titel: Systemzeit
|
|
Achso: Wo wir uns grad so nett unterhalten:
Komme ich in Matlab und oder Simulink an die Systemzeit um den random number generator zu initialisieren?
Momentan löse ich das Problem, indem ich die Zählvariable der for-schleife übergebe - aber auch das produziert bei zwei skriptausführungen ja zweimal den gleichen output...
Danke!
AnnePanne
|
|
|
|
|
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.
|
|