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

Differentialgleichung mit Octave plotten

 

pegasus
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2016, 09:12     Titel: Differentialgleichung mit Octave plotten
  Antworten mit Zitat      
Hallo Zusammen,

ich habe eine DGL, die ich gerne mit Octave plotten möchte. Mein Programm sieht bisher so aus:

Code:

% Variablen
k = 1.4;
V =  8e-3;
A = 7.09e-4;
R = 296.8;
T = 300;
Pa = 10^5;
Pi = 1.3*10^5;
%Rechengrößen
Pu = ((k + 1)/2)^(k /(k-1))*Pa;
dp0 = Pi/Pa;
t = 0;
%DGL
function dp = f(p,t)
dp = -(A/V)*sqrt(k*R*T)*k*sqrt((2/(k-1)))*(2/(k+1))^(1/(k-1))*t*((p/Pu)^((k-1)/k)*sqrt(((p/Pu)^((k-1)/k)-(2/(k+1)))))
endfunction
t = [0:0.001:0.1];
p = lsode('f',dp0,t);
plot(t,p)
 


Dabei bekomme ich folgende Fehlermeldung:

Code:

error: 'A' undefined near line 15 column 8
error: called from
    f at line 15 column 4
    dgl at line 18 column 3
error: lsode: evaluation of user-supplied function failed
error: called from
    dgl at line 18 column 3
error: lsode: inconsistent sizes for state and derivative vectors
error: called from
    dgl at line 18 column 3
 


Komischerweise merkt das Programm schon an, dass A nicht definiert sei. Aber die Variable A ist oben defininert worden.

Ich würde jetzt erwarten, dass lsode mir für jeden Zeitpunkt t einen Wert p aus der Funktion f zurückgibt.

Wo liegt mein Fehler ?

Gruß

pegasus
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: 19.10.2016, 12:06     Titel: Re: Differentialgleichung mit Octave plotten
  Antworten mit Zitat      
Hallo pegasus,

Ich kenne mich mit Octave nicht aus, aber die Fehlermeldung klingt so eindeutig, dass ich ihr einfach glaube: A ist zwar definiert, aber nicht innerhalb der Funktion, in der die Variable verwendet wird. Das gleiche gilt für die anderen Konstanten ebenfalls. Definiere sie innerhalb der zu integrierenden Funktion. In Matlab verwendet man dafür lieber eine anonyme Funktion, in der die Konstanten als Parameter angegeben werden. Aber wie das mit Octave funktioniert, weiß ich nicht genau.

Gruß, Jan

Code:
function dp = f(p,t)
k = 1.4;
V =  8e-3;
A = 7.09e-4;
R = 296.8;
T = 300;
Pa = 10^5;
Pi = 1.3*10^5;
%Rechengrößen
Pu = ((k + 1)/2)^(k /(k-1))*Pa;
dp0 = Pi/Pa;
t = 0;

dp = -(A/V)*sqrt(k*R*T)*k*sqrt((2/(k-1)))*(2/(k+1))^(1/(k-1))*t*((p/Pu)^((k-1)/k)*sqrt(((p/Pu)^((k-1)/k)-(2/(k+1)))))
endfunction

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2016, 12:29     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich habe deinen Code übernommen und nun habe ich die folgende Fehlermeldung:
Code:

warning: function name 'f' does not agree with function file name 'dgl2.m'
error: 'p' undefined near line 13 column 67
error: called from
    dgl2 at line 13 column 4
 


Der Programmcode sieht dann so aus:

Code:

function dp = f(p,t)
k = 1.4;
V =  8e-3;
A = 7.09e-4;
R = 296.8;
T = 300;
Pa = 10^5;
Pi = 1.3*10^5;
%Rechengrößen
Pu = ((k + 1)/2)^(k /(k-1))*Pa;
dp0 = Pi/Pa;
t = 0;
dp = -(A/V)*sqrt(k*R*T)*k*sqrt((2/(k-1)))*(2/(k+1))^(1/(k-1))*t*((p/Pu)^((k-1)/k)*sqrt(((p/Pu)^((k-1)/k)-(2/(k+1)))))
endfunction
t = [0:0.001:0.1];
p = lsode('f',dp0,t);
plot(t,p)
 


ich habe die lsode Funktion so verstanden, dass 'f' meine Funktion ist. Dazu deint dp0 als Startwert und wird über t berechnet. Jetzt würde ich erwarten, dass ich die Werte für p geplottet bekomme.

Gruß

pegasus
Private Nachricht senden Benutzer-Profile anzeigen
 
pegasus
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2016, 17:30     Titel:
  Antworten mit Zitat      
Habe das Problem gelöst,
musste noch global den Startwert definieren.
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.