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ösungen finden mit solve()

 

xam
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 02.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2009, 15:34     Titel: Lösungen finden mit solve()
  Antworten mit Zitat      
Hi,

Ich arbeite gerade an meiner Diplomarbeit und muss dafür viele Gleichungen mit Matlab lösen. Leider findet Matlab meistens nicht die Lösungen der Gleichungen. Ich gebe euch ein Beispiel:

Versucht mal folgende Gleichung nach g aufzulösen:

Code:

syms g;

f=((812645161601874614848619127247817812865006845053*g)/16 + ((57222854709238240257894797803520*g - 643017026894555325745114242519)*((5059092316073667975*g^3)/32 + (659107777017313515*g^2)/8 + (101629282204561761*g)/16))/3 + (2071770372019578087272161747959407969093195736095*g^2)/8 - (26527516280266426075251778551235590629739263800475*g^3)/32 + 2125682776227716202540798882824034373827821568000*g^4 + 1806360361080980474464393180084517281984413696)/(g*(34660008129735425*g + 2533274790395904)*(57222854709238240257894797803520*g + 3*(180780529979136430714092974750210807201019809134764585752985600*g^2 - 26345060190713216529746300175904068446546560343863503712419840*g - 304119999171324381990897701821747937343216548354427388581815)^(1/2) - 643017026894555325745114242519)) - ((5059092316073667975*g^3)/32 + (659107777017313515*g^2)/8 + (101629282204561761*g)/16)/(3*g*(34660008129735425*g + 2533274790395904))

solve(f,g)
 

Matlab liefert als Lösung nur irgendwelche riesigen Zahlenkolonnen und Mengenangaben
Also sowas wie
Code:

und dann kommen zig Zeilen Zahlen.
Wenn ich aber obige Funktion einfach mal plotte:
Code:

Dann sehe ich sofort eine Lösung, nämlich ca. 0,28. (Schnittpunkt der Funktion mit der y-Achse) Warum findet Matlab diese Lösung nicht selbst?
Noch eine zweite Frage: Ich suche bei all diesen Funktionen generell nur Lösungen zwischen 0 und 1. Ich hab deshalb auch schonmal sowas versucht wie:
Code:

solve(f,'g>0','g<1',g)
 

Aber das ist wohl der falsche Ansatz. Kann man sonst irgendwie nur nach Lösungen in einem Intervall suchen lassen?

Gruß Max
Private Nachricht senden Benutzer-Profile anzeigen


Olli
Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 19.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2009, 16:54     Titel:
  Antworten mit Zitat      
Kannst ja mal die Funktion "fzero" ausprobieren, die sucht Nullstellen und man kann nen Startwert angeben in dessen Nähe gesucht werden soll. Oder auch die Funktion "roots" die sucht nur Nullstellen.

Möglicherweise liegt das Problem an den enorm großen Zahlen in deiner Aufgabe?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.09.2009, 17:35     Titel:
  Antworten mit Zitat      
solve findet eine symbolische, exakte Lösung (also hier mit etlichen Brüchen). fzero findet eine numerische Näherungslösung und ist daher eindeutig die bessere Wahl.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 02.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2009, 19:06     Titel:
  Antworten mit Zitat      
Hi und danke für die Antworten. Das hat mir z.T. auch wirklich geholfen! Mittlerweile bin ich weitergekommen und habe nun ein ähnliches Problem. Jetzt möchte ich eine von zwei Variablen abhängige Gleichung nach einer Variablen auflösen.

Versucht mal folgendes:

Code:

syms v g;

f=((25*(v - 4/5)^2)/64 - (9*v*(1/(10*g) + 1)*(v/g - 1))/(8*((4*v)/(5*g) - 9/10)))^(1/2) - (5*v)/8 + ((9*v)/1000 + (81*g*v)/100 - (12393/50000*g*v^2 - 729/31250*g*v - 12393/50000*g^2*v - 6561/5000*g^3*v + 6561/10000*g^4 + 23409/1000000*v^2 + 6561/10000*g^2*v^2 - 6561*g^4*v*(1/10/g + 1)*(1/g*v - 1)/(4000/g*v - 4500) - 729*g^2*v*(1/10/g + 1)*(1/g*v - 1)/(25000/g*v - 28125) + 51759*g^3*v*(1/10/g + 1)*(1/g*v - 1)/(40000/g*v - 45000) + 29241*g*v^2*(1/10/g + 1)*(1/g*v - 1)/(400000/g*v - 450000) + 454977/1000000*g^2*v^2*(1/10/g + 1)^2*(1/g*v - 1)^2/(4/5/g*v - 9/10)^2 - 51759/50000*g^3*v^2*(1/10/g + 1)^2*(1/g*v - 1)^2/(4/5/g*v - 9/10)^2 + 6561/10000*g^4*v^2*(1/10/g + 1)^2*(1/g*v - 1)^2/(4/5/g*v - 9/10)^2 + 6561*g^3*v^2*(1/10/g + 1)*(1/g*v - 1)/(4000/g*v - 4500) - 19683*g^2*v^2*(1/10/g + 1)*(1/g*v - 1)/(20000/g*v - 22500))^(1/2) - (81*g^2)/100 + (657*g*v*(1/(10*g) + 1)*(v/g - 1))/(1000*((4*v)/(5*g) - 9/10)) + (81*g^2*v*(1/(10*g) + 1)*(v/g - 1))/(100*((4*v)/(5*g) - 9/10)))/((162*v)/125 - (162*g)/125 + (162*g*v*(1/(10*g) + 1)*(v/g - 1))/(125*((4*v)/(5*g) - 9/10))) + 1/2;

solve(f,v);
 

Also mein Matlab scheint da in endlicher Zeit keine Lösung zu finden.
Ich weiß, ist ne wirklich schöne Funktion Wink. Das ist nur ein Beispiel. Ich muss etliche dieser Gleichungen irgendwie nach v auflösen. Hat da jemand ne Idee?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

im wesentlichen kann die Symbolic Toolbox das lösen, was du von Hand lösen kannst - sie kann es nur schneller. Hier kommt v in den verschiedensten Potenzen vor. Das ist nunmal nicht geschlossen lösbar.

Die einzige Möglichkeit ist, für einen oder mehrere Werte von g numerisch (also wieder mit fzero) die Lösung zu finden. Das kann man ja auf einem so dichten Gitter machen, dass man z.B. einen schönen Plot erzeugen kann.

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.