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

Simulation ausbremsen?

 

ITSE
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 16.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2011, 18:15     Titel: Simulation ausbremsen?
  Antworten mit Zitat      
HI

mein Rechner scheint ein Problem mit meiner Simulation zu haben. Weiß aber leider nicht woran dies liegt. Gibt es eine Möglichkeit die SImulation zu verzögern, bzw Pausen einzufügen in denen sich der Rechner wieder "beruhigen" kann? In dieser Zeit könnte ich auch Variablen auslesen und deren Werte löschen, damit die verwendeten Byte nicht zu groß werden.

Gruß Thomas
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 07.08.2011, 18:40     Titel:
  Antworten mit Zitat      
Eine Simulation kannst du damit anhalten...

Code:
set_param('mdl Name', 'SimulationCommand', 'pause')
% und zum Auslesen...
get_param('mdl Name','Var.- oder Blockname');
 


Das behebt ja aber nicht dein Problem und löschen von benötigten Variablen ist wohl auch keine gute Idee Wink

Um aber evtl. Hilfestellung über mögliche Ursachen geben zu können, bräuchte man etwas mehr Infos.
Private Nachricht senden Benutzer-Profile anzeigen
 
ITSE
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 16.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2011, 19:07     Titel:
  Antworten mit Zitat      
Hi danke schonmal

Wie schaffe ich es damit zum Beispiel nach 20 Sekunden ne Pause zu machen?
Versuche mir mit dem oben erfragten Vorgehen eine Möglichkeit zu schaffen dieses folgende Problem zu umgehen. Eine genauere Beschreibung des Problems findest du hier.

http://www.gomatlab.de/simulation-friert-rechner-ein-t19385.html

GRuß Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 07.08.2011, 19:07     Titel:
  Antworten mit Zitat      
Falls das Modell mit variabler Schrittweite arbeitet, könnte die Beschreibung damit zusammen hängen, dass für eine Weile sehr kleine Schritte numerisch nötig sind und es den Eindruck hat, dass ein Problem vorliegt.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
ITSE
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 16.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2011, 19:33     Titel:
  Antworten mit Zitat      
Hi

habe es auch schon mit fixen Schrittweiten bzw. bei variablen mit einer minimalen Schrittweite versucht.

Anbei mal die nötigen Dateien.

Gruß Thomas

OPtimierungsergebnis.m
 Beschreibung:
Dieses File ausführen und dann das Modell starten

Download
 Dateiname:  OPtimierungsergebnis.m
 Dateigröße:  4.1 KB
 Heruntergeladen:  441 mal
Regelgesetz.m
 Beschreibung:

Download
 Dateiname:  Regelgesetz.m
 Dateigröße:  528 Bytes
 Heruntergeladen:  442 mal
myfun.m
 Beschreibung:
Führt eine Fsolve suche durch

Download
 Dateiname:  myfun.m
 Dateigröße:  535 Bytes
 Heruntergeladen:  452 mal
Modell.mdl
 Beschreibung:

Download
 Dateiname:  Modell.mdl
 Dateigröße:  39.85 KB
 Heruntergeladen:  447 mal
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: 07.08.2011, 20:50     Titel:
  Antworten mit Zitat      
Hallo,

bis ca. 33.7s läuft die Simulation bei mir durch. Zwar nicht schnell, aber sie läuft.

Die genaue Ursache des Problems konnte ich nicht feststellen. Ein paar Hinweise habe ich jedoch:
- Du verwendest fsolve zum Lösen eines Gleichungssystems in jedem Simulationsschritt. Das Problem dabei ist, dass fsolve nicht immer eine Lösung findet. Du solltest also auf jeden Fall exitflag abfragen um festzustellen, ob es irgendwelche Probleme gibt (d.h. exitflag < 0).
- Wenn ich die Simulation abbreche und u ansehe, sehe ich am Ende so etwas:
0,506846442902508
0,506846442897964
-1120401,85285371
-1120453,38638938
0,506846442903247
-1120416,24679726
-1120401,85284955
0,506846442907093
0,506846442905161
... und das bei einer mikroskopischen Schrittweite. D.h. es gibt irgendein Problem in dem System. Evtl. läuft FSOLVE je nach Iteration in eine andere Lösung? Kann aber auch was anderes sein.
- Du scheinst dir die Verwendung verschiedener Algorithmen der Optimization TB überlegt zu haben. Dir ist aber klar, dass sie unterschiedliches versuchen? FSOLVE löst eine Gleichung (d.h. möglichst nahe an 0), FMINCON minimiert eine Größe. Es müsste also ggf. auch MYFUN.M angepasst werden.
- Der Aufbau dieser Anwendung ist recht unübersichtlich, insbesondere die Verwendung von globalen Variablen ist schlimm anzusehen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 16.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2011, 21:21     Titel:
  Antworten mit Zitat      
HI

Zitat:
- Du scheinst dir die Verwendung verschiedener Algorithmen der Optimization TB überlegt zu haben. Dir ist aber klar, dass sie unterschiedliches versuchen? FSOLVE löst eine Gleichung (d.h. möglichst nahe an 0), FMINCON minimiert eine Größe. Es müsste also ggf. auch MYFUN.M angepasst werden.


Das ist mir bedingt klar. Im Endeffekt für variable Werte von v, F=Null werden.
Also max(es,er)*xRx - 1 = 0. Der Wert (v) für den dies zutrifft soll zurückgegeben werden und in der Embedded Matlab Function verwendet werden. Dabei gilt das v maximal 1 sein darf und danach stetig fällt bis zu einer Grenze (hier vmin=0.1).
Da ich keine Grenze bei fsolve verwenden konnte habe ich mit anderen Funktionen experimentiert. Bin aber letztendlich wieder zu fsolve gekommen und habe dann eine if Abfrage eingebaut.

Zitat:
- Der Aufbau dieser Anwendung ist recht unübersichtlich, insbesondere die Verwendung von globalen Variablen ist schlimm anzusehen.


Das glaube ich dir gerne. Leider habe ich überhaupt keine Ahnung von Matlab gehabt bevor ich mit der Aufgabe anfing. Auch gab es keinen Kurs oder so.

Zitat:
- Wenn ich die Simulation abbreche und u ansehe, sehe ich am Ende so etwas:
0,506846442902508
0,506846442897964
-1120401,85285371
-1120453,38638938
0,506846442903247
-1120416,24679726
-1120401,85284955
0,506846442907093
0,506846442905161
... und das bei einer mikroskopischen Schrittweite. D.h. es gibt irgendein Problem in dem System. Evtl. läuft FSOLVE je nach Iteration in eine andere Lösung? Kann aber auch was anderes sein.


Das ist mir auf einem anderen Rechner auch aufgefallen aber dort konnte dann letztendlich bis 60 sec problemlos simuliert werden. Kann sein das ich dort eine minimale Schrittweite eingestellt hatte.


GRuß Thomas
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: 07.08.2011, 21:32     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Auch gab es keinen Kurs oder so.

Die gibts z.B. hier:
http://www.mathworks.de/services/training/courses/MLBE_1.html
Falls du an einer Universität bist: die bieten meistens auch Vorlesungen in die Richtung an. Wenn nicht, kannst du es ja anregen.

Zitat:
Das ist mir auf einem anderen Rechner auch aufgefallen aber dort konnte dann letztendlich bis 60 sec problemlos simuliert werden. Kann sein das ich dort eine minimale Schrittweite eingestellt hatte.

Letzteres bedeutet, dass unter Ignoranz von in Ungenauigkeiten resultierenden Problemen einfach weitersimuliert wird. Das heißt aber auch, dass die Lösung dann wertlos ist, weil man sie letztlich genausogut auswürfeln könnte.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 16.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2011, 22:47     Titel:
  Antworten mit Zitat      
HI

japp das werde ich auch anregen. Ich meine es gibt einen Grundkurs, in welchem man aber nichts lernt ausser eben das 1*1 in MAtlab und das ist deutlich zu wenig. Auch ist diesr nicht Pflicht und wenn man ihn macht kommt es nur darauf an wie das Ergebnis aussieht aber nicht der Weg.

Habe meinen Fehler so glaube ich gefunden. Ich habe v ja nur als skalar und da kann ich dann fzero benutzen.
Ich bin nur noch nicht dahinter gekommen warum er in gewissen Intervallen nicht sucht.

Gruß Thomas
P.S.: Danke dir für den Link, den werde ich mir mal anschauen
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: 08.08.2011, 07:55     Titel:
  Antworten mit Zitat      
Hallo,

bei FZERO sucht ausgehend vom Startpunkt nach der "nächsten" Nullstelle. Je nach Funktion kann die allerdings weiter vom Startwert weg sein als die tatsächlich nächste Nullstelle.
Wenn du die Suche auf ein Intervall beschränken willst, ist vielleicht FMINBND besser geeignet.
Wenn das nicht ausreicht, bitte Problematik konkretisieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 16.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2011, 09:20     Titel:
  Antworten mit Zitat      
Hi

also das Problem mit FMINBND ist, das er keine Nullstelle findet, sondern immer mit dem maximalen Startwert für die Suche arbeitet. FZERO hingegen findet Nullstellen, welche auch stimmen, nur springt er irgendwann in seiner Suche zu weit. Wenn ich dies jedoch unterbinde geht es. Leider bedeutet dies, das ich für jeden Initialzustand erst mühsam von Hand suchen muss ob es solche Stellen gibt.

Am Beispiel. Für FZERO verwende ich:
Code:

v0 = 0.5;
options=optimset('Display','iter','TolX',1e-8);
[v,fval,exitflag] = fzero(@myfun,v0,options);


Nun wird ausgehend von der ersten Nullstelle v = 0.8015, der Wert v immer geringer auf der Suche nach Nullstellen. Soweit so gut. Jedoch springt das Intervall auf dem die Nullstelle gesucht wird bei der Simulationszeit 59,6835 plötzlich. So dass er 5 Intervalle auflistet in denen keine Nullstelle gefunden wurde und letztendlich findet er eine zwischen (grob gesagt) -10 und 10. Diese liegt ungefähr bei v = -7.
v darf aber laut Definition des Reglers nur zwischen 0 und 1 liegen. Wegen möglicher nummerischer Probleme bei einer Division durch Null, wird der Minimalwert für v jedoch auf 0.1 gelegt.
Wie sich herausstellt gibt es auch eine Nullstelle die für den Zeitwert t = 59.6835 auf dem Intervall 0.1 - 1 liegt. Um diese zu finden habe ich die Optimierung wie folgt verändert. Ich füge dem obigen code noch diesen Part bei.

Code:

if v < 0
    v0 = 0.2;
    [v,fval,exitflag] = fzero(@myfun,v0,options);
end
 


Dies führt dazu das die Optimierung läuft, kann aber meiner Meinung nach nicht die Lösung des Problems sein.

Verwende ich hingegen:
Code:

v0 = 0.1
options=optimset('Display','iter','TolX',1e-20,'MaxIter',400,'MaxFunEvals',300,'TolFun',1e-6);
[v,fval,exitflag] = fminbnd(@myfun,v0,1,options)
 


So kommt für jeden Simulationsschritt ein Ideales v von 1 heraus. Ich weis nun nicht ob es daran liegt das die Grenzen zu Nahe beieinander liegen. In der doc fminbnd steht, das es dann passieren kann das immer die obere Grenze heraus gegeben wird.

Gruß Thomas
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: 08.08.2011, 09:35     Titel:
  Antworten mit Zitat      
Hallo,

dass du je nach Startzeit unterschiedliche Startwerte verwendest ist doch legitim? Ich könnte mir z.B. auch vorstellen, 0, 0.5 und 1 als Startwerte zu verwenden und dann abzuprüfen, wann ich ein (bzw. das beste) Minimum zwischen 0 und 1 bekomme.

Was FMINBND angeht:
Du hast schon daran gedacht, die myfun.m entsprechend anzupassen?
Statt Nullstelle suchen kannst du ja das Quadrat minimieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 16.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2011, 09:56     Titel:
  Antworten mit Zitat      
Hi

stimmt auch wieder. Legitim ist es, aber auch aufwendig es von Hand jedesmal abzuändern, in dem Wissen das es eine Nullstelle geben muss, welche aber leider nicht automatisch gefunden wird.

Ich stehe bezüglich der Abänderung des myfun.m Files auf dem Schlauch.
Reicht es F= (max(es,er)*xRx-1)^2 zu ändern oder gibt es da mehr?
Was muss ich da genau ändern?

Gruß Thomas
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: 08.08.2011, 10:26     Titel:
  Antworten mit Zitat      
Hallo,

zum ersten Teil: ich würde es ja nicht manuell ändern, sondern das einmal fest so einprogrammieren.

zum zweiten Teil: Ja, das sollte reichen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 16.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2011, 10:54     Titel:
  Antworten mit Zitat      
Hi

super Harald, weiß gar nicht wie ich dir danken soll.

Gruß Thomas
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.