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

Lösung eines Gleichungssystems mit 3 Gleichungen

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2013, 20:35     Titel: Lösung eines Gleichungssystems mit 3 Gleichungen
  Antworten mit Zitat      
Liebe Community,

ich versuche derzeit, in Matlab ein Gleichungssystem, bestehend aus 3 Gleichungen mit insgesamt 3 Unbekannten zu lösen. Später will ich die Gleichungen auf thermodynamische Prozesse übertragen, aber vorerst rechne ich mit einfachen Zusammenhängen. Als Beispiel 3 Gleichungen, bereits nach 0 umgestellt:

g1 = 'a1*b1*(c1-x)-A = 0'
g2 = 'a2*b2*(c2-y)-A = 0'
g3 = 'd1*e1*((y-c1)-(c2-x))/log((y-c1)-(c2-x))-A=0'

Daraus stelle ich das System auf:
syms a1 b1 c1 x A a2 b2 c2 y d1 e1

Und folgende Koeffizienten sind als Werte gegeben:

a1=1;
b1=2;
c1=3;
a2=4;
b2=5;
c2=6;
d1=7;
e1=8;

Die Unbekannten sind also x, y und A.

Wenn ich jetzt den solve Befehl eingebe:
[x y A]=solve (g1,g2,g3)

erhalte ich zwar die umgestellten Gleichungen nach x, y und A:

x =

-(A*log(- c1 - c2 - (A - a1*b1*c1)/(a1*b1) - (A - a2*b2*c2)/(a2*b2)))/(d1*(c1 + c2 + (A - a1*b1*c1)/(a1*b1) + (A - a2*b2*c2)/(a2*b2)))


y =

-(A - a1*b1*c1)/(a1*b1)


A =

-(A - a2*b2*c2)/(a2*b2)

Aber ich versteh nicht warum auch in der Gl., die nach A umgestellt ist, A noch auf der rechten Seite vorkommt. So komm ich dann ja leider nicht an die expliziten Lösungen.

Hat jemand ne Idee woran das liegen könnte? Steh ich irgendwo aufm Schlauch und hab nen Fehler eingebaut?

Ich bedanke mich schon mal falls jemand Lust hat sich des Problems anzunehmen Wink


Harald
Forum-Meister

Forum-Meister


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

du musst schon auf der rechten Seite angeben, nach was du auflösen willst:
Code:
[xsol, ysol, Asol] = solve(g1, g2, g3, x, y, A)


Allerdings findet MATLAB da keine explizite Lösung, was verständlich ist, wenn du die erste und zweite Gleichung nach x bzw. y auflöst, das dann in die dritte einsetzt, und dir ansiehst, was dann dasteht: eine Gleichung, die A sowie log(A) enthält.

Ich würde die Lösung stattdessen numerisch mit fzero bzw. fsolve suchen. Da alle Parameter als Werte vorgegeben sind, sollte das kein Problem sein.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2013, 16:38     Titel:
  Antworten mit Zitat      
Hallo Harald, vielen Dank für deine schnelle Antwort.

Mit dem fsolve bzw. fzero habe ich noch nie gearbeitet, und das erste Beispiel zu fsolve aus dem Hilfedokument konnte ich nicht wirklich nachvollziehen bzw. auch nicht "nachrechnen". Könntest du mir vielleicht für meinen konkreten Fall eine Hilfestellung geben?

Viele Grüße
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2013, 18:07     Titel:
  Antworten mit Zitat      
Bzw. ich poste mal den Code, so wie ich ihn bisher erstellt hätte:
syms a1 b1 c1 x A a2 b2 c2 y d1 e1

g1 = 'a1*b1*(c1-x)-A = 0';
g2 = 'a2*b2*(c2-y)-A = 0';
g3 = 'd1*e1*((y-c1)-(c2-x))/log((y-c1)-(c2-x))-A=0';

a1=1;
b1=2;
c1=3;
a2=4;
b2=5;
c2=6;
d1=7;
e1=8;
X0= [10; 10; 10];
Y0= [10; 10; 10];
A0= [10; 10; 10];

[x1,y1,A1] = fsolve (g1,g2,g3,X0,Y0,A0,'x,y,A');

Als Fehlermeldung bekomme ich:

Error in Untitled2 (line 19)
[x1,y1,A1] = fsolve (g1,g2,g3,X0,Y0,A0,'x,y,A');

Womit ich aber nicht wirklich was anfangen kann.
 
Harald
Forum-Meister

Forum-Meister


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

der entscheidende Teil der Fehlermeldung fehlt, nämlich die Fehlermeldung an sich.

Sprechen wir vom selben Beispiel?
http://www.mathworks.com/help/relea.....013a/optim/ug/fsolve.html
Viel einfacher kanns doch nicht sein? Und vor allem ist es recht nah an deiner Aufgabenstellung, nur dass du drei Unbekannte und Gleichungen hast und im Beispiel sind es zwei.

Als erstes musst du eine Funktion (ohne syms, da du numerisch arbeitest) schreiben, die den Vektor der Unbekannten entgegennimmt und die Abweichungen in den Gleichungen für den Input zurückgibt.

Und dann beschäftige dich bitte mal mit der Aufrufsyntax von fsolve, denn dass dein Aufruf so nicht gehen kann, sollte daraus offensichtlich sein.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2013, 22:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort. Das gepostete Beispiel entspricht dem, das ich in der Matlab Hilfe gefunden habe. Wenn ich es also auf mein Beispiel übertrage, würde ich die Funktion folgendermassen aufstellen, oder?

Dabei wäre dann x=x(1), y=x(2), A=x(3)

function F = myfun(x)
F=[a1*b1*(c1-x(1))-x(3);
a2*b2*(c2-x(2))-x(3);
d1*e1*((x(2)-c1)-(c2-x(1)))/log((x(2)-c1)-(c2-x(1)))-x(3)];

Dürfen die Variablen a1 etc. so drin bleiben oder muss man dann da die Zahlen einsetzen? Ich würde natürlich gerne die Variable stehen lassen, um bei nachträglichen Änderungen diese nur einmalig ändern zu müssen.

optimoptions müsste ich aus meiner Funktion rausnehmen glaub ich, da wir an der Uni noch R2011a nutzen.

Die function speichere ich dann als .m-file.

Aber ich versteh nicht ganz wie ich folgendes umformen kann:

x0 = [-5; -5]; % Make a starting guess at the solution
options = optimoptions('fsolve','Display','iter'); % Option to display output
[x,fval] = fsolve(@myfun,x0,options) % Call solver

x0 könnte ich ja so lassen, vom Prinzip gibt dies doch nur den "Startwert" vor? Die options-Zeile dürfte mit der Version ja nicht klappen. Und die letzte Zeile würde ich so übernehmen, nur ohne die options.

Das Beispiel habe ich mittlerweile hinbekommen,da stand ich ja wirklich auf dem Schlauch. Auch für mein Beispiel bekomme ich gerade Werte raus:

x0 = [-5; -5; -5]; % Make a starting guess at the solution
[x,fval] = fsolve(@myfun2,x0) % Call solver

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.

<stopping criteria details>


x =

3.0000 + 0.0000i
6.0000 + 0.0000i
0.0000 - 0.0000i


fval =

1.0e-008 *

0.0000 - 0.0000i
0.0000 - 0.0000i
0.0181 + 0.1097i

Damit müsste das halbwegs auf dem richtigen Weg sein hoff ich.
 
Harald
Forum-Meister

Forum-Meister


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

das sieht gut aus. Du kannst dir ja das Beispiel auch aus deiner Version heraus ansehen.

Wenn es nur um eine oder wenige Optimierungen geht, würde ich die Daten am Anfang der Funktion definieren. Alternativ kannst du hier nachlesen:
http://www.mathworks.com/help/relea.....ing-extra-parameters.html

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.