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

Komisches Ergebnis in Matlab durch solve-Befehl

 

Alton2
Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 08.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2016, 00:24     Titel: Komisches Ergebnis in Matlab durch solve-Befehl
  Antworten mit Zitat      
Hallo,

ich habe versucht eine Gleichung in Matlab zu lösen mithilfe dem Befehl:
solve(D==0,x1);
D ist eine Funktion von x1 wobei x1=sym('x1') ist.

Das Ergebnis ist ein sehr komisches:

(42161*root(z^4 + (18400*z^3)/42161 - (901894296*z^2)/1777549921 - (18400*z)/42161 - 84640000/1777549921, z, 2)^2)/6250 + (1777549921*root(z^4 +....

Was ist bedeutet z und root? Ich habe eine ganz normale Zahl erwartet. Die gleiche Rechnung habe ich in meinen Taschenrechner auflösen lassen und hab die erwartete Zahl herausbekommen. Daher müsste Matlab dies ja auch können... aber wie?

Gruß,
Alton2
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.11.2016, 12:00     Titel: Re: Komisches Ergebnis in Matlab durch solve-Befehl
  Antworten mit Zitat      
Hallo Alton2,

Vielleicht steckt ja ein Bug in Deinem Code. Deshalb wäre es praktisch, wenn Du ein Minimal-Beispiel posten würdest, das das gezeigte Verhalten reproduziert.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Alton2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 08.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2016, 15:12     Titel: Beispiel
  Antworten mit Zitat      
Diese Gleichung soll nach x1 gelöst werden:

-((92*((8*x1)/81 - 8/9)*((92*(1 - ((2*x1)/9 - 2)^2)^(1/2))/25 + 368/125))/(25*(1 - ((2*x1)/9 - 2)^2)^(1/2)) - 8*x1 + 108)/(2*((2*x1 - 27)^2 + ((92*(1 - ((2*x1)/9 - 2)^2)^(1/2))/25 + 368/125)^2)^(1/2))

Das Ergebnis soll 13.0004 ergeben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

und welchen Code hast du nun dafür verwendet?

Das Problem dürfte sein, dass solve symbolisch, also exakt zu lösen versucht. Dabei kommen Polynome 4. Grades ins Spiel, und dafür gibt es keine expliziten Formeln.

Wenn du eine Zahl als Ergebnis haben möchtest, versuch mal eine Umwandlung mit double oder eval , oder eine numerische Lösung mit fzero oder fsolve .

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 08.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2016, 21:58     Titel:
  Antworten mit Zitat      
Danke hat jetzt geklappt.

noch eine Frage. Ich will folgende Gleichung nach x1 auflösen:

Code:
D1 =
 
-(4*xm1 - 8*x1 + 4*xm2 + (2*Ey*(2*x1 - 2*xm1)*(ym1 - ym2 + 2*Ey*R*(1 - (x1 - xm1)^2/(Ex^2*R^2))^(1/2)))/(Ex^2*Hardcoreradius*(1 - (x1 - xm1)^2/(Ex^2*R^2))^(1/2)))/(2*((ym1 - ym2 + 2*Ey*R*(1 - (x1 - xm1)^2/(Ex^2*R^2))^(1/2))^2 + (xm1 - 2*x1 + xm2)^2)^(1/2))


Dazu bin ich folgendermaßen vorgegangen:

Code:
syms x1 xm1 xm2 ym1 ym2 R Ex Ey

x1=solve(D1==0,x1)


Dazu gibt er mir keine Lösung raus, weil er anscheinend ins zeitliche unendliche rechnet. Wenn ich die Werte für "xm1 xm2 ym1 ym2 R Ex Ey" vor dem solve Befehl einsetze gibt er mir die Lösung heraus. Ich will aber eine allgemeine Formel für x1.

Wo liegt hier das Problem?

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

was lässt dich denn annehmen, dass es eine explizite Lösung gibt?
Was hast du davon, wenn du eine Formel bekommst und damit Wände tapezieren kannst?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 08.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2016, 23:08     Titel:
  Antworten mit Zitat      
"was lässt dich denn annehmen, dass es eine explizite Lösung gibt? "
Wenn ich Zahlenwerte einsetze dann funktioniert es ja.

"Was hast du davon, wenn du eine Formel bekommst und damit Wände tapezieren kannst?"
Wenn ich die Formel habe, spare ich mir in meiner aufwendigen Simulation immer wieder das Umformen mit den eingesetzten Werten (würde tausende male durchgeführt werden müssen).
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.11.2016, 23:33     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wenn ich Zahlenwerte einsetze dann funktioniert es ja.

Vermutlich aber mit einer numerischen Lösung?

Zitat:
Wenn ich die Formel habe, spare ich mir in meiner aufwendigen Simulation immer wieder das Umformen mit den eingesetzten Werten (würde tausende male durchgeführt werden müssen).

Wenn die Formel sehr komplex ist, kann das erneute Lösen sogar schneller sein. Allerdings würde ich dafür fzero oder fsolve verwenden, denn das numerische Lösen dürfte schneller sein als das symbolische.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 08.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2016, 23:39     Titel:
  Antworten mit Zitat      
fsolve(D1,x1) oder fzero(D1,x1) funktioniert nicht.
-->FZERO requires at least two input arguments or a structure with valid fields.
-->FSOLVE requires the following inputs to be of data type double: 'X0'.


Wie würde man das für meinen Beispiel eingeben?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

In der Dokumentation findest du viele Beispiele. Insbesondere akzeptieren die beiden Funktionen keine symbolischen Ausdrücke.

Code:
% alle Variablen außer x1 müssen definiert sein
f = @(x1) -(4*xm1 - 8*x1 + 4*xm2 + (2*Ey*(2*x1 - 2*xm1)*(ym1 - ym2 + 2*Ey*R*(1 - (x1 - xm1)^2/(Ex^2*R^2))^(1/2)))/(Ex^2*Hardcoreradius*(1 - (x1 - xm1)^2/(Ex^2*R^2))^(1/2)))/(2*((ym1 - ym2 + 2*Ey*R*(1 - (x1 - xm1)^2/(Ex^2*R^2))^(1/2))^2 + (xm1 - 2*x1 + xm2)^2)^(1/2));
fzero(f, x1_start)
 


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 08.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2016, 20:49     Titel:
  Antworten mit Zitat      
Danke Harald, das klappt
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.