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

Matrix ändern und für nächsten Zeitschritt bereitstellen

 

Hiwi-Job
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 07.11.2013, 14:05     Titel: Matrix ändern und für nächsten Zeitschritt bereitstellen
  Antworten mit Zitat      
Hallo zusammen,

ich möchte in meinem Simulink-Modell in jedem Zeitschritt eine Matrix bearbeiten und für den nächsten Zeitschritt bereitstellen. Leider komme ich in diesem Zusammenhang nicht mit den "from workspace" und "to workspace" - Blöcken klar.
Oder gibt es eine Möglichkeit, so etwas direkt in Simulink zu realisieren (ohne den Umweg über den workspace von Matlab)?

Zur Verdeutlichung mal ein Beispiel:
Die Simulationszeit ist in Sekunden angegeben, in der Matrix ändert sich nur jede Stunde etwas. Die fixe Schrittweite beträgt 3600.

Ich habe dann folgende Matrix:
Code:
e=[0 21.1200000000000 1 4 0;3600 22.5000000000000 2 0 19;7200 23 2 0 27;10800 14.5000000000000 1 3 0;14400 2.75000000000000 1 5 0;18000 1 1 9 0;21600 -0.500000000000000 0 0 0;25200 -1 0 0 0;28800 0 0 0 0;32400 5 1 2 0]


(Die Spalte 1 habe ich eingefügt, da -soweit ich das verstanden habe- der "from workspace"-Block diese benötigt. Für die Berechnungen ist die Spalte nicht relevant.)

Nun möchte ich die Matrix im ersten Zeitschritt in Simulink in einem MATLAB-Function-Block bearbeiten.
Zum Beispiel möchte ich an Stelle 1, 3 eine 2 schreiben, an die Stelle 2,3 eine 1 usw. usw.
Danach möchte ich die veränderte Matrix wieder speichern (für den nächsten Schritt bereithalten).

Im zweiten Schritt möchte ich die veränderte Matrix nun wieder im MATLAB-Function-Block bearbeiten. Dazu kann es nötig sein auch auf Werte von Zeile eins zugreifen zu müssen.
Verändert wird dann wieder die Stelle 2,3 und 3,3 und 4,3 usw. usw.
Danach wieder speichern usw. usw.


Ich würde mich sehr freuen, wenn mir jemand kurz erklären könnte wie ich grundsätzlich vorzugehen habe und wie ich auf einzelne Werte der Matrix innerhalb des MATLAB-Function-Blocks zugreifen kann.



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


Bibonaut
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 06.06.13
Wohnort: Berlin
Version: 2013a
     Beitrag Verfasst am: 07.11.2013, 21:02     Titel:
  Antworten mit Zitat      
Hallo,

spontan fällt mir eine vielleicht nicht ganz so saubere Lösung ein:

Wenn du die Anzahl deiner Interationsschritte kennst, könntest du eine Matrix mit zeros(n,m,anzahl_Iterationsschritte) initialisieren und die matrix (:,:,1) mit deinen Eingangswerten belegen.

In der Matlab-Function könntest du dann deine neuen Werte in (:,:,Iterationsschritt) schreiben und behältst gleichzeitig deine älteren Matrizen. Mit dem simout-Block erzeugst du so allerdings massig überflüssige Daten, da für jeden Zeitschritt die komplette 3 dimensionale Matrix gespeichert wird. Es sei denn, du kannst festlegen, dass dir nur die Matrix des letzten Iterationsschritts in den Workspace ausgegeben wird.
Das weiß ich aber gerade nicht Wink

Vielleicht hilfts als Denkanstoß!
Viele Grüße
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 08.11.2013, 15:30     Titel:
  Antworten mit Zitat      
Hallo Alex,

danke für die Idee. Ich befürchte nur, dass die sowieso schon sehr langsame Simulation dann vollends nicht mehr in einer vernünftigen Zeit zu berechnen ist. Die Matrix hat im ersten Teststadium schon knapp 10.000 Zeilen und es werde später noch mehr sein.

Hat noch jemand eine weitere Idee?


Grüße,
Ingo
Private Nachricht senden Benutzer-Profile anzeigen
 
Bibonaut
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 06.06.13
Wohnort: Berlin
Version: 2013a
     Beitrag Verfasst am: 10.11.2013, 17:41     Titel:
  Antworten mit Zitat      
Hi,

bei so einer Größe muss es dann wohl doch etwas sauberer gelöst werden Very Happy

Benötigst du immer nur die letzte? Wie wäre einer Rückkopplung und einem Memory-Block? Ich hab es noch nie ausprobiert, aber soll mal so als Idee in den Raum gestellt werden Smile

Viele Grüße und Erfolg
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 12.11.2013, 08:48     Titel:
  Antworten mit Zitat      
Bibonaut hat Folgendes geschrieben:
[...]Benötigst du immer nur die letzte? [...]


Hallo Alex,

was meinst du mit "nur die letzte"? Ich brauche immer nur eine Matrix, immer die, die im letzten Schritt geändert wurde. Allerdings brauche ich nicht immer nur die letzte Zeile der Matrix sondern im schlechtesten Fall (dessen Auftreten ich nicht beeinflussen kann) auch Werte aus einer der ersten Zeilen.

Eine Einschränkung kann ich machen, ob das hilft, kann ich aber nicht beurteilen: Bei jedem Durchlauf werden "nur" noch Daten von Zeilen nach/unter einer gewissen Zeile verändert. Sprich in Runde 50 werden "nur" noch die Zeilen 50 bis Ende verändert. Zugegriffen werden muss dabei allerdings auf die Zeilen 1 bis Ende.


Grüße,
Ingo
Private Nachricht senden Benutzer-Profile anzeigen
 
Bibonaut
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 06.06.13
Wohnort: Berlin
Version: 2013a
     Beitrag Verfasst am: 12.11.2013, 09:44     Titel:
  Antworten mit Zitat      
Sorry, ich meinte die letzte Matrix... . Unklar formuliert.

Ich hab mal kurz ein kleines Beispiel gebastelt, um zu zeigen, wie ich mir das vorgestellt habe:
Du führst die berechnete Matrix um einen Zeitschritt verzögert zurück, sodass du sie im nächsten Zeitschritt verwenden kannst.

Setz in der Matlab-Fcn mal einen Breakpoint und schau dir die Variablen u1 und u2 an. In dem Beispiel wird auf die Eingangsmatrix (rand(5)) einfach in jedem Zeitschritt eine 1 addiert (Ausgang) und im nächsten Zeitschritt als u2 in der Funktion wieder zur Verfügung gestellt.

Viele Grüße
Alex

test.slx
 Beschreibung:

Download
 Dateiname:  test.slx
 Dateigröße:  13.89 KB
 Heruntergeladen:  562 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 12.11.2013, 17:21     Titel:
  Antworten mit Zitat      
Hallo Alex,

kein Problem, hatte ich mir ja fast gedacht, dass wir das selbe meinen.

Entweder ich habe dich falsch verstanden, oder aber dein Beispiel tut bei mir nicht das was es soll.

Wenn ich das Beispiel laufen lasse, müsste ja nach 10 Zeitschritten in Zelle1,1 statt einer 0,96 eine 10,96 oder zumindest 9,96 stehen. Bei mir gibt er aber eine 1,96 aus. Sprich er addiert immer wieder zur Ausgangsmatrix eine 1 behält aber die veränderte Matrix nicht für den nächsten Schritt.

Grüße,
Ingo


p.s.: Mal ganz platt gefragt, ist es überhaupt sinnvoll für ein quasi-stationäres Modell so einen Aufwand zu betreiben oder wäre es dann sinnvoller direkt in Matlab zu programmieren/rechnen? Question

test.slx
 Beschreibung:

Download
 Dateiname:  test.slx
 Dateigröße:  18.42 KB
 Heruntergeladen:  519 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Bibonaut
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 06.06.13
Wohnort: Berlin
Version: 2013a
     Beitrag Verfasst am: 12.11.2013, 19:22     Titel:
  Antworten mit Zitat      
War nicht so ganz richtig, was ich da in den Anhang gepackt habe... Wink Wenn du eine Matrix für t=0 als Anfangsbedingung hast, muss die auch in dem Memory-Block als Initial Condition stehen. Da hab ich vorhin nicht dran gedacht.

Was willst du denn genau machen? Hast du ein dynamisches System? Generell würde ich behaupten, kannst du alles auch mit Matlab machen.

Viele Grüße und im Anhang nochmal .... Wink
Alex

test.slx
 Beschreibung:

Download
 Dateiname:  test.slx
 Dateigröße:  17.25 KB
 Heruntergeladen:  530 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 13.11.2013, 08:33     Titel:
  Antworten mit Zitat      
Hallo Alex,

super, danke! So könnte es wohl tatsächlich funktionieren. Ich werde das gleich mal ausprobieren.

Danach entscheide ich dann, ob ich nur noch mit Matlab oder mit Matlab und Simulink arbeiten werde (für dieses System).


Grüße,
Ingo
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 13.11.2013, 09:43     Titel:
  Antworten mit Zitat      
Und es funktioniert wirklich Smile

Und so ganz langsam ist es auch nicht Cool

Danke nochmal!
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.