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

Numerische Lösung von Polynomen mit "solve"?

 

astroblem
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2010, 18:07     Titel: Numerische Lösung von Polynomen mit "solve"?
  Antworten mit Zitat      
Ich habe vor einigen Wochen angefangen, mit MatLab zu arbeiten, um theoretische Volumenänderungen durch Korrosion an geometrischen Körpern auf Basis chemischer Analysen zu errechnen.

Am Beispiel eines Quaders ist mein Problem leicht erklärt. Das Volumen des Quaders ist bekannt (V=l*a*b). Durch eine homogene Korrosion würden die Seitenlängen des Quaders theoretisch um den Wert x verringert (Eindringtiefe der Korrosion somit x/2). Aufgrund zuvor ermittelter Parameter sind die Werte l, a, b errechnet worden und damit bekannt, variieren aber von Probe zu Probe. Auch das durch die Korrosion veränderte theoretische Volumen wurde zuvor berechnet, ist also auch bekannt.

Um die Eindringtiefe der Korrosion theoretisch zu ermitteln, habe ich mich für den Befehl "solve" entschieden.

Code:
% Beispiel
x = solve('(l-x)*(a-x)*(b-x)=Vneu','x')


Als Ergebnis erhalte ich drei Lösungen (zwei davon komplex) in algebraischer Form. Ich benötige aber numerische Ergebnisse, mit denen ich weiterarbeiten kann.

Bislang kann ich die algebraischen Ergebnisse mittels Copy-Paste weiter berechnen lassen, so daß ich nur auf diesem Wege numerische Werte erhalte. Angesichts zahlreicher Analysen, die ich auf diesem Wege auswerten möchte, ist diese Variante auf Dauer kontraproduktiv. Gibt es eine Lösung, die es mir Erlaubt, die Lösung eines solchen Polynoms auch numerisch darstellen zu lassen (meinetwegen auch in komplexer Form)? Mir wäre auch sehr geholfen, wenn ich den bisherigen Lösungsweg beibehalten und mir den Zwischenschritt mit Copy-Paste sparen könnte.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

dazu muss eigtl nur eine geringfügig andere Routine verwendet werden.

Code:
x = fsolve(@(x) (l-x)*(a-x)*(b-x) - Vneu)


Damit das funktioniert, müssen zur Zeit der Ausführung des Befehls im Workspace Variablen a, b, l und Vneu existieren.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2010, 00:40     Titel:
  Antworten mit Zitat      
Herzlichen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.449
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.01.2010, 10:06     Titel:
  Antworten mit Zitat      
Sorry, Startwert fehlt:

Code:
x = fsolve(@(x) (l-x)*(a-x)*(b-x) - Vneu, x0)

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2010, 17:11     Titel:
  Antworten mit Zitat      
Vielen Dank noch einmal für den Tip. Leider hat der so nicht funktioniert. Ich habe einen "Umweg" genommen.

Code:

syms x;
C = sym2poly((l-x)*(a-x)*(b-x)-(Vneu));
x = roots(C)


Das funktioniert und liefert genau die Ergebnisse, die ich haben will.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.449
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.01.2010, 17:31     Titel:
  Antworten mit Zitat      
Hallo,

nur aus Neugierde: inwiefern hat es nicht funktioniert?

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2010, 14:51     Titel:
  Antworten mit Zitat      
Hallo,

um ehrlich zu sein, ich weiß nicht genau, woran es lag. Ich habe keinen Startwert x0 definiert, und ohne Startwert scheint sich "fsolve" nicht benutzen zu lassen. Aber durch Deinen Tip mit "fsolve" bin ich über Umwege (Skript von Prof. Gramlich, Uni Ulm, Literaturtips in diesem Forum - sehr empfehlenswert!) und der Mtalab-Hilfe auf die Lösung mit den Koeffizienten und dem Befehl "roots(Koeffizienten)" gekommen. Das funktioniert einwandfrei.

Vielen Dank,

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