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

Unterbestimmes Gleichungssystem mit beschr. Variablen lösen

 

theodrin
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 30.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2013, 12:39     Titel: Unterbestimmes Gleichungssystem mit beschr. Variablen lösen
  Antworten mit Zitat      
Hallo!

Lösen von Gleichungssystemen:
Ich habe ein unterbestimmtes Gleichungssystem
7 Gleichungen
9 Variablen
Das Problem ist dass die einzelnen Variablen nur in einem bestimmten Wertebereich möglich sind. z.B. ...<a<... , ...<b<... , usw.

Ich weiß (oder bin mir ziemlich sicher) , dass das Gleichungssystem nicht exakt lösbar ist, aufgrund der beschränkten Wertebereiche der Variablen.

Meine Frage ist jetzt: Kann Matlab dieses Gleichungssystem mit einem "Best Match" lösen. Also sogut als möglich alle Gleichungen erfüllen?

Danke für die Antworten!

theo
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: 30.12.2013, 12:47     Titel:
  Antworten mit Zitat      
Hallo,

je nach Art der Gleichungen und der Nebenbedingungen würde ich folgende Funktionen versuchen:
Code:


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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 30.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2013, 17:26     Titel:
  Antworten mit Zitat      
Hallo!

Danke für die Antwort!!

ich hab mir die Hilfe angeschaut, aber leider kann ich das Beispielprogramm mal gar nicht laufen lassen, weil ich keine function im Skript oder prompt definieren darf...

Das mit dem xsin(x...) geht.

schaut so aus

Code:


x = [1];
x0 = [1];

[x,resnorm] = lsqnonlin(@(x)sin(x.*x), x0);

 


auch das mit den Grenzen (lower upper bounds) krieg ich hin...

Aber leider kenne ich mich nicht so gut aus. Wie bekomm ich meine 7 Gleichungen und 9 Variablen in die lsqnonlin()?

Vielleicht könnte mir wer ein kleines lauffähiges Beispiel/Code mit 2 Gleichungen und 3 unbekannten schreiben[/code], wenns geht?
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: 30.12.2013, 19:44     Titel:
  Antworten mit Zitat      
Hallo,

Funktionen müssen in separaten Dateien stehen.

Hast du dir denn die Hilfe von lsqnonlin und insbesondere das Beispiel mal durchgeschaut?

Welche Gestalt haben deine Gleichungen?

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 30.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2013, 20:07     Titel:
  Antworten mit Zitat      
Hmm, das mit den separaten Dateien versteh ich noch nicht

Gleichungen schauen folgendermaßen aus

a1 = X1 / ( X2 *X3*X4*X5 )
a2 = (1+X1*X6) / ( X2 *X3*X4*X5 )

usw..

wobei ich natürlich leicht alle Gleichungen zu

0 = ...

machen kann

so hab ich 7 Glg. und insgesamt 9 unbekannte
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: 30.12.2013, 20:22     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Hmm, das mit den separaten Dateien versteh ich noch nicht

Was gibt es daran nicht zu verstehen? Im Zweifelsfall auch mal die Doku zu Funktionen lesen.

Du musst die Gleichungen so formulieren, dass du einen Vektor X als Eingang hast und einen Vektor Y der zu lösenden Gleichungen (also auf 0 gesetzt) als Ausgang.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 30.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2013, 20:33     Titel:
  Antworten mit Zitat      
So also ich hab jetzt mal eine Gleichung geschrieben
und kann die mit lsqnonlin lösen

wie bekomm ich jetzt mehrere Funktionen in diese Funktion??
Private Nachricht senden Benutzer-Profile anzeigen
 
theodrin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 30.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2013, 21:00     Titel:
  Antworten mit Zitat      
So ich hab jetzt mal was geschrieben:

Das File mit der function schaut folgendermaßen aus:

Code:

function Y = fun_s0(X)

Y(1) = X(6) / (X(1)*X(2)*X(3)*X(4)) - 9.792871e23;
Y(2) = (1+X(6)*X(7)) / (X(1)*X(2)*X(3)*X(4)) - 6.1349897e19;
Y(3) = 80*X(5) / (X(1)*X(2)*X(4)) - 1.7081858e15;
Y(4) = ( X(1)*X(3) + X(1)+X(2)*X(4) ) / (X(1)*X(2)*X(3)*X(4)) - 2.67534e10;
Y(5) = 80*X(5) / X(1) - 239434;
Y(6) = 1 - 1;
Y(7) = 1 - 1;
 


Das war mal eine Variante wo ich nur 5 Gleichungen und 7 Variable hab.
Leider musste ich die letzten beiden Y(6) und Y(7) einfügen weil ich sonst einen Meldung bekommen hab.

Large Scale method requires at least as many equations as variables...


Also hab ich die beiden eingefügt und es ging, aber leider kommt lauter Blödsinn raus. Die Bedingungen und das M-File schaut folgendermaßen aus:

Code:


y = [0 0 0 0 0 0 0];
x0 = [2e-4 1e-4 1e-6 1e-6 0.1 15000 1e-5];
lb = [1e-6 1e-6 1e-9 1e-9 1e-3 10 1e-12];
ub = [1e-1 1e-1 1e-3 1e-3 1 1e9 1e-5];
[y, resnorm] = lsqnonlin(@fun_s0,x0,lb,ub);

 


Was hab ich falsch gemacht??
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: 30.12.2013, 22:07     Titel:
  Antworten mit Zitat      
Hallo,

bitte beschreiben, was "lauter Blödsinn" ist.

Statt aufzufüllen würde ich dann eher fmincon verwenden.
Code:
opts = optimset('TolFun', 1e-16, 'TolX', 1e-16, 'MaxFunEvals', 1000000, 'MaxIter',100000);
[y, resnorm] = fmincon(@(x) norm(fun_s0(x)),x0,[],[],[],[], lb,ub, [], opts);


Mir scheint, dass die Variablen auf einer sehr unterschiedlichen Skala liegen - und dass das Probleme macht. Da kann es helfen, die Option 'TypicalX' anzugeben.

Grüße,
Harald
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.