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

Fsolve mit Grenzen-Handling

 

muenzi
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 12.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2015, 10:36     Titel: Fsolve mit Grenzen-Handling
  Antworten mit Zitat      
Hallo zusammen,

manch einer wird wohl gerade die Hände über dem Kopf zusammenschlagen, dass eine solche Frage schon wieder auftaucht. Natürlich weiß ich, dass Fsolve nativ keine Grenzen unterstützt. Nun habe ich aber ein "großes" (mehrere tausend Variablen) schlecht skaliertes (Variablen befinden sich zu 98 % in den Grenzen zwischen 0 bis 1. 2 % zwischen -1 und 0. Die kleinsten Variablen gehen in den Bereich 1e-9) dünnbesetztes (etwa 10 % der Gleichungen sind ungleich 0) Gleichungssystem.

Bisher habe ich dieses Gleichungssystem mit lsqnonlin und trust-region-reflective gelöst. Doch aufgrund der schlechten Skalierbarkeit und der Funktionsweise von lsqnonlin, das 0 = f_1(x)^2 + f_2(x)^2 + ... + f_n(x)^2 löst, gibt es häufiger mal extreme Konvergenzprobleme. Dann dauert eine Lösung schon mal mehrere Stunden, statt wie sonst einige Sekunden oder mal eine Minute.

Daher bin ich zu Fsolve mit trust-region-reflective gewechselt. Hier wird 0 = f_n für n = 1,...,N, also jede Gleichung einzeln, gelöst und so schlägt die schlechte Skalierung nicht so stark rein. Allerdings kann es hier bei ungünstigen Startwerten dazu kommen, dass meine physikalischen Grenzen überschritten werden.

Deshalb wüsste ich gern ob es möglich ist fsolve so umzuschreiben, dass es wie lsqnonlin Grenzen beachtet oder welche anderen Lösungsmöglichkeiten ich habe. Über ein paar Schlagworte wäre ich sehr froh. Bereits versucht habe ich übrigens auch schon das Gleichungssystem auf seine Startwerte zu normieren und somit mit lsqnonlin eine bessere Konvergenz zu erreichen. Leider ohne Erfolg.
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: 09.03.2015, 10:53     Titel:
  Antworten mit Zitat      
Hallo,

lsqnonlin ist an sich der richtige Solver, wenn es Schrankenbedingungen gibt.
Wenn die Skalierungsinformation bekannt ist, sollte eine entsprechende Wahl der Option TypicalX (zu setzen über optimoptions) helfen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 12.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2015, 11:36     Titel:
  Antworten mit Zitat      
Hallo Harald, die Option von TypicalX hatte ich auch schon einmal getestet. Leider kein Erfolg. Während fsolve für die Lösung des Gleichungssystems bei gleichen Startwerten und trust-region-reflective 10 Iterationen benötigt, braucht lsqnonlin über 1000 Iterationen.
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: 09.03.2015, 16:18     Titel:
  Antworten mit Zitat      
Hallo,

ist schwierig, da zu helfen, ohne das Problem vor sich zu haben.
Im Zweifelsfall mal den Technischen Support von MathWorks kontaktieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 12.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2015, 02:20     Titel:
  Antworten mit Zitat      
Das kann ich gut nachvollziehen. Da der Programmcode mittlerweile aber schon einige tausend Zeilen umfasst (mit Startwertbestimmung, Grenzenvorgabe und Gleichungssystem und Nachverarbeitung der Ergebnisse) und zusätzlich zu der Simulation noch einige Veröffentlichungen in Planung sind, kann ich den Code leider nicht im Detail anbieten.

Bis noch jemandem etwas einfällt werde ich mir vorerst damit behelfen, das Gleichungssystem mit fsolve zu lösen. Anschließend werden die Grenzen mit dem Ergebnisvektor abgeglichen. Wenn die Grenzen erfüllt sind, dann wird das Ergebnis akzeptiert, wenn nicht dann wird das Gleichungssystem mit lsqnonlin und gesetzten Grenzen gelöst.

Da die Konvergenzprobleme maximal bei 1-2 % der berechneten Gleichungssystemlösungen auftreten, ist das bisher ein ganz guter Kompromiss. Im Falle von Konvergenzproblemen kann nun ein weiteres Mal fsolve, diesmal mit den schon recht genauen Ergebnissen von lsqnonlin als Startwertvektor, aufgerufen werden.
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: 10.03.2015, 19:10     Titel:
  Antworten mit Zitat      
Hallo,

mich verwundert das wie gesagt sehr.
Die Details könnte ich mir ohnehin nicht ansehen. Je kleiner das Beispiel, umso lieber. Ohne zumindest ein Beispiel zu haben, in dem das Problem auftritt, weiß ich aber wirklich nicht weiter.
Bleibt wie gesagt der Technische Support von MathWorks. Ich glaube nicht, dass man Sorgen haben muss, dass von dort was nach außen dringt ;)

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 12.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2015, 09:49     Titel:
  Antworten mit Zitat      
Da gebe ich dir sicher Recht Harald. Vielen Dank für die Hilfe.
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.