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ösen einer nichtlinearen Gleichung

 

Heilbronner99
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 23.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2016, 20:43     Titel: Lösen einer nichtlinearen Gleichung
  Antworten mit Zitat      
Hallo Zusammen,
ich habe folgende nichtlineare Gleichung mit Matlab 2015 zu lösen:


Zu gegebenem Ausgangsdruck P0 und
für jede Temperatur T berechnet sich der Gleichgewichtsdruck P aus einer Gleichung
dritten Grades:
H(P)=4*(P0-P)-K(T)*(3*P-P0)^3=0
die man zweckmäßigerweise numerisch löst. Ergänzen Sie Ihr MATLAB-Programm, sodass in einem zweiten Diagramm eine Kurvenschar P = P(P0) für T = 300:10:400 K
erzeugt wird, indem Sie diese Gleichung dritten Grades für jeden Wert von P0 mit der
MATLAB-Funktion P=fzero('H',PStart) mit einem geeigneten Startwert PStart lösen.

Die Funktion von K besitze ich und ist nur abhängig von T.

Ich weis nicht wie in an diese Aufgabe ran gehen soll. Hat jemand eine Idee?

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

Hast du dir mal die Dokumentation von fzero und die zugehörigen Beispiele durchgelesen?
Wo genau liegt das Problem?

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 23.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2016, 09:24     Titel:
  Antworten mit Zitat      
Hallo,
danke für deine Antwort.
fZero anwenden ist nicht das Problem.
Vielmehr die Funktion schreiben, da ja P eine Funktion von P0 ist und auch K eine Funktion von T. Ich habe also zwei Abhängigkeiten in einer Funktion zu programmieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

zur Übergabe von Parametern siehe das Beispiel "Root of Function with Extra Parameter" aus der Doku von fzero sowie
http://de.mathworks.com/help/matlab.....meterizing-functions.html
(Parameterizing Using Nested Functions)

Falls du damit nicht klar kommst, löse die Gleichung doch zunächst mal für ein bestimmtes P0 und ein bestimmtes T (und poste das). Dann kannst du immer noch weiter sehen, wie du die Variation von P0 und T umsetzen kannst.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 23.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2016, 12:29     Titel:
  Antworten mit Zitat      
Mit den Beispielfunktionen bin ich nicht wirklich klar gekommen.
Habe mal das Programm geschrieben mit einer konstanten Temperatur und einem konstanten P0. Bin mir aber nicht sicher, ob ich das so richtig verstanden habe.

Code:
%Im Funktionsprogramm
function f=func(P)

T=300;
Kp=10.^((7350./T)-(19) ;
P0=5;

f=4*(P0-P)-Kp*(3*P-P0)^3

%Im Hauptprogramm
x0=0;
P=fzero(@func, x0)


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

Forum-Meister


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

... und wenn du P0 und T variieren willst, dann musst du sie als zusätzliche Eingabeparameter in func.m entgegennehmen
Code:
function f=func(P, T, P0)

und im Hauptprogramm den Aufruf entsprechend anpassen:

Code:
for I = ... % Schleife über alle T
for J = ... % Schleife über alle P0
T = ...; % momentanes T, abh. von I
P0 = ...; % momentanes P0, abh. von J
P(I,J)=fzero(@func, x0);
end
end


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.