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

implizite DGL 1. Ordnung in Matlab numerisch lösen

 

CJ2011
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2011, 14:18     Titel: implizite DGL 1. Ordnung in Matlab numerisch lösen
  Antworten mit Zitat      
Hallo,

ich habe eine DGL, die mir Probleme bereitet:

 A \frac{dT(x)^4}{dx} + B \frac{dT(x)}{dx} + C T(x) = K

Das Problem stellt nur die 4te Potenz der ersten Ableitung im ersten Term dar. Ich kann die DGL deshalb nicht in die explizite Form

 \frac{dT(x)}{dx} = F(T)

umschreiben und mit ode45 in Matlab lösen.
Ich weiß außerdem auch nicht, wie eine derartige DGL bezeichnet wird.

Könnt ihr mir weiterhelfen? Vielen Dank schon mal und schöne Grüße.
CJ2011
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: 21.02.2011, 14:29     Titel:
  Antworten mit Zitat      
Hallo,

das ist keine implizite DGL, sondern eine DGL 4. Ordnung (weil 4. Ableitung vorkommt).

Zu lösen ist sowas, indem man 4 DGLen 1. Ordnung für T und die ersten drei Ableitungen aufstellt. Das lässt sich dann mit ode45 lösen.

Setze x(1) = T, x(2) = T', ..., dann sieht die Funktion etwa so aus
Code:
function dx = abl(x)
dx = zeros(4,1);
A = ...;
B = ...;
C = ...;
K = ...;
dx(1) = x(2);
dx(2) = x(3);
dx(3) = x(4);
dx(4) = 1/A * (K - C*x(1) - B*x(2));


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
CJ2011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2011, 14:50     Titel:
  Antworten mit Zitat      
Hallo Harald,

es ist leider keine DGL 4. Ordnung, ich hätte das vielleicht etwas deutlicher schreiben sollen:

A \left(\frac{dT(x)}{dx}\right)^4 + B \frac{dT(x)}{dx} + C T(x) = K

Eine DGL 4. Ordnung würde ja in korrekter Schreibweiße so aussehen:

A \frac{d^4T(x)}{dx^4} + B \frac{dT(x)}{dx} + C T(x) = K

Schöne Grüße
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: 21.02.2011, 15:00     Titel:
  Antworten mit Zitat      
Hallo,

ich wollte nicht kleinlich sein und das anmeckern Wink So eine Gleichung ist mir noch nicht untergekommen, aber irgendwann ist immer das erste Mal.

Da es nun so aussieht:
Die Ableitung ist die Lösung einer Polynomialgleichung, die sich mit ROOTS, FSOLVE oder FZERO finden lassen sollte.
Du musst dann lediglich noch entscheiden, welche der ggf. mehreren Lösungen dann nun deine Ableitung sein soll.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
CJ2011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2011, 15:44     Titel:
  Antworten mit Zitat      
Hallo,

so jetzt hab ich nochmal viel Zeit investiert und die meine DGL überarbeitet bzw. vereinfacht (es wurden Anteile vorerst vernachlässigt). Nun habe ich folgende DGL:

 \frac{dT(x)}{dx} = \frac{K}{L} \left( 1 + \alpha \cdot T(x)\right) \cdot x \cdot (L-x)

Sieht jetzt schon mal viel einfacher und besser lösbar aus.
Das ganze stellt einen Temperaturverlauf auf einem Draht der Länge L dar. Nun habe ich ein weiteres Problem, ich habe nämlich zwei Randbedingungen: T(0)=300 und T(L)=300!

Wie kann ich in meinem DGL-Solver (ode45) diese Randbedingungen setzen?

Schöne Grüße
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: 24.02.2011, 16:39     Titel:
  Antworten mit Zitat      
Hallo,

wenn die Parameter K, L und alpha fest sind, gibt es nur einen Freiheitsgrad, der üblicherweise über den Anfangswert festgesetzt wird. Zwei Bedingungen können dann meines Erachtens nicht erfüllt werden, außer sie sind gleichwertig.
Es könnte z.B. sein, dass deine Lösung symmetrisch um x = L/2 ist, dann wäre die Bedingung T(L) = 300 automatisch erfüllt.

Ich hoffe, das hilft dir weiter.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
CJ2011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2011, 17:35     Titel:
  Antworten mit Zitat      
Hallo Harald,
ja die Parameter sind fest, und da es ja eine DGL 1.Ordnung ist, kann es ja eigentlich nur eine Bedingung geben.
Die Lösung sollte auch um L/2 symmetrisch sein, aber leider ist sie es nicht, wenn ich sie mit ode45 berechne.

Code:

dT2 = @(x,T) K / L * ( ( 1 + alpha * T ) * x .* ( L - x ) );
[x2,T2] = ode45(dT2,[0 L],0);
 


Vielen Dank für schnelle Hilfe und schöne Grüße
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: 24.02.2011, 17:56     Titel:
  Antworten mit Zitat      
Hallo,

kannst du mir zur Reproduktion noch deine Parameter geben?
Müsste das letzte Argument beim Aufruf nicht 300 sein?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
CJ2011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2011, 19:26     Titel:
  Antworten mit Zitat      
Hallo Harald,

ja, das letzte Argument ist 300 Kelvin (bzw Raumtemperatur T20)
ich hab das ganze nur fürs Forum etwas vereinfacht dagestellt.

Code:

T20 = 300;
K = 5.4e6;
L = 0.03;
alpha = 4.3e-3;

dT2 = @(x,T) K / L * ( ( 1 + alpha * T - T20 ) * x .* ( L - x ) );
[x2,T2] = ode45(dT2,[0 L],T20);
 


Wenn ich die DGL über [0 2*L] komme ich näherungsweiße eine symmetrische Funktion. Wahrschein noch ein Fehler in der DGL.

Schöne Grüße
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: 24.02.2011, 19:45     Titel:
  Antworten mit Zitat      
Hallo,

da ist wohl wirklich noch ein Fehler drin. Eine Temperatur von -2*10^6 würde mir jedenfalls Bedenken bereiten Wink Vielleicht die Einheiten?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
bligg
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 15.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2011, 23:59     Titel:
  Antworten mit Zitat      
Hi,

du interessierst dich für die stationäre Lösung eines Randwertproblems, ode45 ist ein Integrator für Anfangswertprobleme.
Randwertprobleme werden meistens mit selbstgeschriebenen Methoden der finiten Differenzen gelöst, wo sich Randbedingungen leicht implementieren lassen.

Einige Anregungen gibt's im Kapitel 10, ab Seite 122, in diesem Skript: http://ficus1.physik.hu-berlin.de/comphys/cp_I.pdf

Grüße
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.