WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Simulationszeit aus Kontakte

 

millerel
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 15.08.13
Wohnort: Essen
Version: MATLAB R2014a
     Beitrag Verfasst am: 31.08.2013, 13:53     Titel: Simulationszeit aus Kontakte
  Antworten mit Zitat      
Moin Leute,

gibt es die Möglichkeit die Simulationszeit aus einem Block innerhalb von Simulink zu definieren. (z.B. Constant mit 10.000 ==> Simulationszeit = 10.000 etc.)

Der Hintergrund:
Ich möchte eine Simulation mehrfach durchlaufen. Jede Schleife dauert z.B. 1000 Zeitintervalle. Ich möchte jedoch auch die Anzahl an Wiederholungen durch eine einfache Konstante einbringen. ZIEL: Ich möchte nicht jedes Mal manuell (Anzahl Wiederholungen * Simulationszeit pro Wiederholung = Simulationszeit) rechnen...

Ich hoffe, dass dies irgendwie möglich ist =D Besten Dank bereits im Voraus!

Viele Grüße, Michael
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.09.2013, 15:41     Titel:
  Antworten mit Zitat      
Hallo,

mir zumindest ist nicht klar, was gesucht wird.
Die Simulationszeit kann man mit dem "Clock"-Block bekommen - falls das weiterhilft.

Für wiederholte Simulationen bietet sich SIM in einer for-Schleife an.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
millerel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 15.08.13
Wohnort: Essen
Version: MATLAB R2014a
     Beitrag Verfasst am: 01.09.2013, 19:38     Titel:
  Antworten mit Zitat      
Erstmal herzlichen Dank für die Antwort.

Ich habe mir schon gedacht, dass es Probleme bei der Frage kommt.

Ich möchte den Simulationszeitraum durch einen Block definieren, d.h. meine Simulationszeit sind 100.000 Timesteps. Diese schreibe ich aber nicht oben ins Simulink-Fenster, sondern habe einen Block "Simulationszeit" mit dem Wert 100.000. Wenn ich diesen veränder, sollte sich auch die eigentliche Simulationszeit verändern.

Ich kann mir aber gut Vorstellen, dass mir die "for-Schleife" reicht. Wie genau setze ich das um? Ich würde gerne eine Simulation (Zeit: 100.000 Timesteps) 3x mit durchlaufen und jedes Mal einen Wert ändern.

Besten Dank und schönen Sonntag Abend noch,
Michael
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.09.2013, 20:31     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Diese schreibe ich aber nicht oben ins Simulink-Fenster, sondern habe einen Block "Simulationszeit" mit dem Wert 100.000. Wenn ich diesen veränder, sollte sich auch die eigentliche Simulationszeit verändern.

Dazu sehe ich keine Möglichkeit. Du kannst aber oben im Simulink-Fenster eine Variable angeben, und diese Variable in MATLAB definieren und anpassen.

Zitat:
Wie genau setze ich das um? Ich würde gerne eine Simulation (Zeit: 100.000 Timesteps) 3x mit durchlaufen und jedes Mal einen Wert ändern.

Etwa so:
Code:
pAll = [p1, p2, p3];
for I = 1:3
p = pAll(I); % p ist Parameter in model
simout = sim('model');
% Verarbeitung der Informationen aus simout
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
millerel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 15.08.13
Wohnort: Essen
Version: MATLAB R2014a
     Beitrag Verfasst am: 02.09.2013, 05:48     Titel:
  Antworten mit Zitat      
Guten Morgen,

nochmal Danke für die schnelle Antwort Smile

Muss ich den Code als in einem Baustein in Simulink integrieren (Embedded MATLAB Fcn?) oder muss ich diesen direkt in Matlab einfügen (wenn ja, wo genau?)

Ich bin noch relativ unerfahren mit MATLAB und Simulink, aber ich arbeite mich mehr und mehr in die Materie =D

Viele Grüße ausm Zug,
Michael
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.09.2013, 07:40     Titel:
  Antworten mit Zitat      
Hallo,

am besten in ein Skript:
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
millerel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 15.08.13
Wohnort: Essen
Version: MATLAB R2014a
     Beitrag Verfasst am: 02.09.2013, 16:12     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich muss mich glaube ich für meine nicht vorhandenen Kenntnisse entschuldigen, aber ich kann mit einem Skript derzeit noch nichts anfangen.

Wie genau erstelle ich dieses Skript?

Wo genau speichere ich es ab?

Wie genau sag ich Simulink, dass es das Skript aufrufen und durchlaufen soll?


Schon Mal herzlichen Dank für die freundliche, Anfänger gerechte Hilfestellung Smile


Viele Grüße aus Bus,
Michael
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.09.2013, 17:43     Titel:
  Antworten mit Zitat      
Hallo,

bitte auch mal einen Blick in die Hilfe werfen, zu Skripten beispielsweise hier:
http://www.mathworks.com/help/relea....._prog/create-scripts.html

Nicht das Simulink-Modell wird das Skript laufen lassen, sondern umgekehrt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
millerel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 15.08.13
Wohnort: Essen
Version: MATLAB R2014a
     Beitrag Verfasst am: 04.09.2013, 08:09     Titel:
  Antworten mit Zitat      
Moin Harald,

ich habe FAST alles hinbekommen, es hakt nur noch an einem ganz kleinen Teil...

Code:
open_system ('model');
pAll = [2, 4, 6];
for I = 1:3
p = pAll(I); % p ist Parameter in model
simout = sim('model');
% Verarbeitung der Informationen aus simout
end


Mein Simulink Modell 'model' besteht aus einem "Constant"-Block mit Variabler Größe "p" dieser Block geht direkt auf einen "To Workspace"-Block mit dem Namen "Sim".

Ich bekomme bei einer Simulationszeit von 10 Timesteps leider nur eine 51x1 double Matrix raus. Ich hoffte auf eine 10x3 Matrix Sad

Wo liegt mein Fehler??? DANKE für die Hilfe !!!!

VG, Michael
Private Nachricht senden Benutzer-Profile anzeigen
 
knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2013, 08:09     Titel:
  Antworten mit Zitat      
Nach jedem Schleifen durchlauf werden die Ergebnisse vom To Workspace Block natürlich überschrieben. Du musst unter sim('model') die Ergebnisse verarbeiten/speichern bevor neu simuliert wird. Das sagt auch übrigens der Kommentar.

Hast du fixed step solver genommen?
Private Nachricht senden Benutzer-Profile anzeigen
 
millerel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 15.08.13
Wohnort: Essen
Version: MATLAB R2014a
     Beitrag Verfasst am: 06.09.2013, 05:39     Titel:
  Antworten mit Zitat      
Hallo,

ich habe mittlerweile einen fixed step solver eingestellt, ja. (vorher war der variable und daher die 51...)

Mir ist durchaus bewusst, dass ich die Ergebnisse vor jedem Durchlauf der Schleife speichern muss.
Frage: Wie kann ich Werte aus einen Block aus dem Simulink Modell speichern?
Frage: Wie kann aus den gespeicherten Werten eine Matrix machen?
==> for i 1:3
ergebnis = [f(i=1), f(i=2), f(i=3)]
also sowas in der Art?

Frage!!!: Wie kann ich z.B. die Anzeige "Display-Block" am Ende der Simulation ins "ergebnis" einbeziehen?????

VG und bereits besten Dank für die Antwort,
Michael
Private Nachricht senden Benutzer-Profile anzeigen
 
knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2013, 07:10     Titel:
  Antworten mit Zitat      
Am besten du hängst an jedes Signal, welches du später brauchst ein "To Workspace" block. Diese sind dann am Ende der Simulation im Workspace und du kannst sie verwenden.

Als Beispiel kannst jetzt in deinem Modell ein To Workspace block sig1 nennen und ihn da verbinden was du speichern willst und einen zweiten To Workspace nennst du display1, den verbindest du da wo auch der Display Block hängt.

Um die Ergebnisse jetzt nach der Simulation zu speichern kannst du unter simout...
dann z.B. folgendes schreiben:
Code:
ergeb(I).signal = sig1.signals.values;
ergeb(I).displ = display1.signals.values(end);
 


Um die Ergebnisse als Matrix zu speichern könntest du nach der for-Schleife:
Code:
matrix = [ergeb(1).signal ergeb(2).signal ergeb(3).signal];

schreiben. Das würde aber nur gehen wenn die Vektoren gleich lang sind, was wahrscheinlich nicht der Fall ist wenn dein Parameter die Simulationszeit ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.