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 nichtlineares Gleichungssystem - Sntax - Symbolic TB

 

byoern
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.10.09
Wohnort: ---
Version: 2006b
     Beitrag Verfasst am: 26.10.2009, 12:22     Titel: Lösung nichtlineares Gleichungssystem - Sntax - Symbolic TB
  Antworten mit Zitat      
Hallo liebe Matlab-Community,

ich sitze nun schon einige Tage an einem Problem und finde die Lösung nicht. Mittlerweile bin ich mir schon so gut wie sicher, dass alles richtig ist, nur noch etwas in der Syntax der letzten Zeile falsch ist.

Ich versuche mit Matlab 2006b ein System von neun Gleichungen mit neun Unbekannten (symbolisch) zu lösen, so dass ich als Ergebnis die Werte von M1-3, O1-3 und d1-3 bekomme. Ich habe auch schon hier und anderen Foren und Tutorials geguckt, aber ich komme irgendwie leider nicht zur Lösung wohl teilweise auch deswegen weil ich noch ein ziemlicher Neuling in Matlab bin.
Also habt ihr ne Idee, oder seht ihr meinen Fehler?

Ich bin über jede Hilfe dankbar. schon jetzt danke für Vorschläge!
Grüße, Björn

Code:
clear, syms M1 M2 M3 O1 O2 O3 d1 d2 d3 y M0 M4 real
eq1='((y+1)^2* M0^4*(sin (O1))^2 - 4*( M0^2*(sin (O1))^2-1)*(y* M0^2*(sin (O1))^2+1)) / ((2*y*M0^2*(sin (O1))^2-(y+1))*((y-1)*M0^2*(sin (O1))^2+2))=M1^2'
eq2='((y+1)^2* M1^4*(sin (O2))^2 - 4*( M1^2*(sin (O2))^2-1)*(y* M1^2*(sin (O2))^2+1)) / ((2*y*M1^2*(sin (O2))^2-(y+1))*((y-1)*M1^2*(sin (O2))^2+2))=M2^2'
eq3='((y+1)^2* M2^4*(sin (O3))^2 - 4*( M2^2*(sin (O3))^2-1)*(y* M2^2*(sin (O3))^2+1)) / ((2*y*M2^2*(sin (O3))^2-(y+1))*((y-1)*M2^2*(sin (O3))^2+2))=M3^2'
eq4='(2*cot(O1)*(M0^2*(sin (O1))^2-1))/(2+M0^2*(y+1-2*(sin (O1))^2)=tan d1'
eq5='(2*cot(O2)*(M1^2*(sin (O2))^2-1))/(2+M1^2*(y+1-2*(sin (O2))^2)=tan d2'
eq6='(2*cot(O3)*(M2^2*(sin (O3))^2-1))/(2+M2^2*(y+1-2*(sin (O3))^2)=tan d3'
eq7='M0*sin (O1)=M1*sin (O2)'  
eq8='M1*sin (O2)=M2*sin (O3)'
eq9='M3=M4'
eq10='y=1.4'
eq11='M0=2.2'
eq12='M4 =1.25'

[M1,M2,M3,O1,O2,O3,d1,d2,d3,y,M0,M4]=solve(eq1,eq2,eq3,eq4,eq5,eq6,eq7,eq8,eq9,eq10,eq11,eq12,M1,M2,M3,O1,O2,O3,d1,d2,d3,y,M0,M4)

Als Fehlermeldung bekomme ich meist wobei ich seitdem Fehlen einen Rechtschreibfehler änderte. Bin mir aber sicher, dass es immer noch nicht geht:

Error in ==> sym.solve at 49
[varargout{1:max(1,nargout)}] = solve(S{:});
Private Nachricht senden Benutzer-Profile anzeigen


mr_endres
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 78
Anmeldedatum: 11.06.08
Wohnort: Unterfranken
Version: ---
     Beitrag Verfasst am: 26.10.2009, 13:38     Titel:
  Antworten mit Zitat      
Hallo,

naja entweder hast du einen copy-paste Fehler beim Kopieren der Gleichungen ins Forum, oder dich vertippt:
Bei Gleichungen eq4 bis eq6 fehlen Klammern:

Code:

%%
clear, syms M1 M2 M3 O1 O2 O3 d1 d2 d3 y M0 M4 real
eq1='((y+1)^2* M0^4*(sin(O1))^2 - 4*( M0^2*(sin(O1))^2-1)*(y* M0^2*(sin(O1))^2+1)) / ((2*y*M0^2*(sin (O1))^2-(y+1))*((y-1)*M0^2*(sin (O1))^2+2))=M1^2'
eq2='((y+1)^2* M1^4*(sin(O2))^2 - 4*( M1^2*(sin(O2))^2-1)*(y* M1^2*(sin(O2))^2+1)) / ((2*y*M1^2*(sin (O2))^2-(y+1))*((y-1)*M1^2*(sin (O2))^2+2))=M2^2'
eq3='((y+1)^2* M2^4*(sin(O3))^2 - 4*( M2^2*(sin(O3))^2-1)*(y* M2^2*(si(O3))^2+1)) / ((2*y*M2^2*(sin (O3))^2-(y+1))*((y-1)*M2^2*(sin (O3))^2+2))=M3^2'
eq4='(2*cot(O1)*(M0^2*(sin(O1))^2-1))/(2+M0^2*(y+1-2*(sin(O1))^2)=tan(d1))'
eq5='(2*cot(O2)*(M1^2*(sin(O2))^2-1))/(2+M1^2*(y+1-2*(sin(O2))^2)=tan(d2))'
eq6='(2*cot(O3)*(M2^2*(sin(O3))^2-1))/(2+M2^2*(y+1-2*(sin(O3))^2)=tan(d3))'
eq7='M0*sin (O1)=M1*sin (O2)'  
eq8='M1*sin (O2)=M2*sin (O3)'
eq9='M3=M4'
eq10='y=1.4'
eq11='M0=2.2'
eq12='M4 =1.25'
%%
solve(eq1,eq2,eq3,eq4,eq5,eq6,eq7,eq8,eq9,eq10,eq11,eq12,M1,M2,M3,O1,O2,O3,d1,d2,d3,y,M0,M4)
 


Matlab R2009b meldet dann keinen Fehler mehr, aber rechnet auch lange ... hab die Rechnung dann abgeborchen. Existiert für das System überhaupt eine Lösung und ist hier nicht eher eine numerische Lösung sinnvoller ?

MfG
Johannes
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.10.2009, 13:55     Titel:
  Antworten mit Zitat      
Hallo,

ich würde auch auf jeden Fall eine numerische Lösung anstreben. Oder zumindest soweit möglich Dinge eliminieren. tan(d1) etc. ergeben sich ja z.B. unmittelbar aus der linken Seite der jeweiligen Gleichungen und kommen soweit ich sehe nicht anderweitig vor. Auch die letzten Gleichungen für y, M0, M4 sollten direkt eingearbeitet werden.

Beim Beitrag von mr_endres fällt mir noch ein SI statt SIN auf.

Zur numerischen Lösung würde ich FSOLVE empfehlen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.10.09
Wohnort: ---
Version: 2006b
     Beitrag Verfasst am: 27.10.2009, 03:23     Titel:
  Antworten mit Zitat      
Vielen Dank euch beiden für eure Vorschläge!

also das mit solve zu Lösen hat leider nicht geklappt, obwohl es 1,5h rechnete, aber zum Schluss kam nur:
Code:
Warning: Explicit solution could not be found.
> In solve at 140
  In sym.solve at 49
 
ans =
 
[ empty sym ]
...heißt das, dass es auf keinen Fall eine Lösung gibt, oder hat Matlab bloß keine gefunden? Denn ich bin mir sicher, dass es eine gibt.

Aber der Misserfolg ist ja noch nicht ganz so schlimm, da ihr ja noch die numerische Lösung vorgeschlagen hattet. Aber leider habe ich damit, obwohl ich mich intensiv mit der Hilfe zu fsolve und umfassender Suche im Internet beschäftigt habe noch keine Lösung.

Es hakt leider an mehreren Stellen, aber ich fange mal ganz simpel an:
Wenn ich in dem Beispiel was in der Hilfe angegeben ist x(1) zu x und x(2) zu y ändere bekomme ich mit
Code:
[x,fval] = fsolve(@(x)myfun(x,y),x,options)  % Call optimizer

Abweichende, falsche Ergebnisse. Wie muss denn die Syntax richtig heißen? Denn ich wollte nach Möglichkeit in meinem Fall mit den 12 Parameter- und Variablennamen, der Übersicht halber, die urspünglichen Namen behalten und nicht gegen x(i) austauschen.

Ich habe sie zwar zu Testzwecken ausgetauscht um zu schauen ob ich so auf ein Ergebnis komme, aber mit folgendem in der M-File
Code:
function F = test(x)
x(12)=1.4
x(1)=2.2
x(11) =1.25  
F = [((x(12)+1)^2* x(1)^4*(sin(x(5)))^2 - 4*( x(1)^2*(sin(x(5)))^2-1)*(x(12)* x(1)^2*(sin(x(5)))^2+1)) / ((2*x(12)*x(1)^2*(sin (x(5)))^2-(x(12)+1))*((x(12)-1)*x(1)^2*(sin (x(5)))^2+2))-x(2)^2;
      ((x(12)+1)^2* x(2)^4*(sin(x(6)))^2 - 4*( x(2)^2*(sin(x(6)))^2-1)*(x(12)* x(2)^2*(sin(x(6)))^2+1)) / ((2*x(12)*x(2)^2*(sin (x(6)))^2-(x(12)+1))*((x(12)-1)*x(2)^2*(sin (x(6)))^2+2))-x(3)^2;
      ((x(12)+1)^2* x(3)^4*(sin(x(7)))^2 - 4*( x(3)^2*(sin(x(7)))^2-1)*(x(12)* x(3)^2*(sin(x(7)))^2+1)) / ((2*x(12)*x(3)^2*(sin (x(7)))^2-(x(12)+1))*((x(12)-1)*x(3)^2*(sin (x(7)))^2+2))-x(4)^2;
      (2*cot(x(5))*(x(1)^2*(sin(x(5)))^2-1))/(2+x(1)^2*(x(12)+1-2*(sin(x(5)))^2))-tan(x(8));
      (2*cot(x(6))*(x(2)^2*(sin(x(6)))^2-1))/(2+x(2)^2*(x(12)+1-2*(sin(x(6)))^2))-tan(x(9));
      (2*cot(x(7))*(x(3)^2*(sin(x(7)))^2-1))/(2+x(3)^2*(x(12)+1-2*(sin(x(7)))^2))-tan(x(10));
      x(1)*sin (x(5))-x(2)*sin (x(6));  
      x(2)*sin (x(6))-x(3)*sin (x(7));
      x(4)-x(11)];


und anschließendem
Code:
>> clear; x0 = [1;1;1;1;1;1;1;1;1;1;1;1];
>> options=optimset('Display','iter');   % Option to display output
>> [x,fval] = fsolve(@test,x0,options)  % Call optimizer


kommt nur die folgende Fehlermeldung mit der ich aber nichts anfangen kann:
Code:
??? Error using ==> sin
Not enough input arguments.

Error in ==> test2 at 5
F = [((x(12)+1)^2* x(1)^4*(sin(x(5)))^2 - 4*( x(1)^2*(sin(x(5)))^2-1)*(x(12)* x(1)^2*(sin(x(5)))^2+1)) / ((2*x(12)*x(1)^2*(sin (x(5)))^2-(x(12)+1))*((x(12)-1)*x(1)^2*(sin (x(5)))^2+2))-x(2)^2;

Error in ==> fsolve at 193
        fuser = feval(funfcn{3},x,varargin{:});


Soviel zu meinen Versuchen. Aber wie schon gesagt würde ich gerne die Ursprünglichen Namen bebehalten, so dass ich folgenen Ausdruck benutzen kann (solange er richtig ist...):
Code:
function F = test2(x)
x(12)=1.4
x(1)=2.2
x(11) =1.25  
F = [((x(12)+1)^2* x(1)^4*(sin(x(5)))^2 - 4*( x(1)^2*(sin(x(5)))^2-1)*(x(12)* x(1)^2*(sin(x(5)))^2+1)) / ((2*x(12)*x(1)^2*(sin (x(5)))^2-(x(12)+1))*((x(12)-1)*x(1)^2*(sin (x(5)))^2+2))-x(2)^2;
      ((x(12)+1)^2* x(2)^4*(sin(x(6)))^2 - 4*( x(2)^2*(sin(x(6)))^2-1)*(x(12)* x(2)^2*(sin(x(6)))^2+1)) / ((2*x(12)*x(2)^2*(sin (x(6)))^2-(x(12)+1))*((x(12)-1)*x(2)^2*(sin (x(6)))^2+2))-x(3)^2;
      ((x(12)+1)^2* x(3)^4*(sin(x(7)))^2 - 4*( x(3)^2*(sin(x(7)))^2-1)*(x(12)* x(3)^2*(sin(x(7)))^2+1)) / ((2*x(12)*x(3)^2*(sin (x(7)))^2-(x(12)+1))*((x(12)-1)*x(3)^2*(sin (x(7)))^2+2))-x(4)^2;
      (2*cot(x(5))*(x(1)^2*(sin(x(5)))^2-1))/(2+x(1)^2*(x(12)+1-2*(sin(x(5)))^2))-tan(x(8));
      (2*cot(x(6))*(x(2)^2*(sin(x(6)))^2-1))/(2+x(2)^2*(x(12)+1-2*(sin(x(6)))^2))-tan(x(9));
      (2*cot(x(7))*(x(3)^2*(sin(x(7)))^2-1))/(2+x(3)^2*(x(12)+1-2*(sin(x(7)))^2))-tan(x(10));
      x(1)*sin (x(5))-x(2)*sin (x(6));  
      x(2)*sin (x(6))-x(3)*sin (x(7));
      x(4)-x(11)];


oder bei
Code:
 function F = test(M0,M1,M2,M3,M4,O1,O2,O3,d1,d2,d3,y)
y=1.4
M0=2.2
M4 =1.25  
F (1)= ((y+1)^2* M0^4*(sin(O1))^2 - 4*( M0^2*(sin(O1))^2-1)*(y* M0^2*(sin(O1))^2+1)) / ((2*y*M0^2*(sin (O1))^2-(y+1))*((y-1)*M0^2*(sin (O1))^2+2))-M1^2;
F (2)= ((y+1)^2* M1^4*(sin(O2))^2 - 4*( M1^2*(sin(O2))^2-1)*(y* M1^2*(sin(O2))^2+1)) / ((2*y*M1^2*(sin (O2))^2-(y+1))*((y-1)*M1^2*(sin (O2))^2+2))-M2^2;
F (3)=  ((y+1)^2* M2^4*(sin(O3))^2 - 4*( M2^2*(sin(O3))^2-1)*(y* M2^2*(sin(O3))^2+1)) / ((2*y*M2^2*(sin (O3))^2-(y+1))*((y-1)*M2^2*(sin (O3))^2+2))-M3^2;
F (4)=  (2*cot(O1)*(M0^2*(sin(O1))^2-1))/(2+M0^2*(y+1-2*(sin(O1))^2))-tan(d1);
F (5)=  (2*cot(O2)*(M1^2*(sin(O2))^2-1))/(2+M1^2*(y+1-2*(sin(O2))^2))-tan(d2);
F (6)= (2*cot(O3)*(M2^2*(sin(O3))^2-1))/(2+M2^2*(y+1-2*(sin(O3))^2))-tan(d3);
F (7)= M0*sin (O1)-M1*sin (O2);  
F (8)= M1*sin (O2)-M2*sin (O3);
F (9)= M3-M4;


Aber hier weiß ich absolut nicht was ich eingeben muss, damit er irgendwas macht, denn bei der Eingabe von
Code:
[x,fval] = fsolve(@testM0,M1,M2,M3,M4,O1,O2,O3,d1,d2,d3,y,x0,options)
kommt
Code:
??? Undefined function or variable 'M4'.


Ich glaube das war so in etwa das was ich heute Nachmittag/Abend ausprobiert habe. Ich hoffe die Beschreibung ist nicht zu umfangreich, aber ich wollte meinen Stand so detailiert wie möglich beschreiben.

Ich danke euch schon mal für's Durchlesen und hoffe auf Tipps für die ich noch dankbarer bin.

Grüße,
Björn
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.10.2009, 21:43     Titel:
  Antworten mit Zitat      
Hallo,

nimm in deiner Funktion test die Leerzeichen nach SIN raus, dann funktionierts. Und wenn du deine Beiträge kürzer hältst, erleichtert das das Beantworten Wink

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 - 2025 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.