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

über eine Ableitung integrieren

 

Deniz
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2011, 17:06     Titel: über eine Ableitung integrieren
  Antworten mit Zitat      
Guten Tag an alle hier,
ich habe ein Problem bzgl. eines Integrals: Und übergebe ich einer Funktion zwei Parameter (T und P) und leite dann eine Funktion bei einem festen T-Wert ab. Nach einer Multiplikation verwende ich die neue Funktion, über die mit P nach integriert werden soll. Dabei sind in der zuvor abgeleiteten Funktion von P abhängige Größen dabei.
Ich habe als Information, dass ich mein M-File auf Grund dessen in verschiedene functions aufteilen muss, bin mir aber nicht ganz sicher, ob ich das richtig verstanden habe. Ich habe mal damit begonnen und wollte nachfragen, ob ich auf dem richtigen Weg bin. Vielen Dank für euere Hilfe

MfG Deniz

Code:

function Out = Integral(T,P)

A=-7.714;
B=1.315;
C=-2.514;
D=-1.725;
Tc=647.096;
pc=220.64E05;
ac=0.457232*8.314^2*Tc^2/pc;


ps=exp(1/0.7*(A*(1-0.7)+B*(1-0.7)^1.5+C*(1-0.7)^3+D*(1-0.7)^6));

w=-1-log10(ps);
   
Fx=ac*(1+(0.37464+1.54226*w-0.26992*w^2)*(T/Tc-1))^2;

function abl=abl(T)

abl=(0.429094*(T/Tc)^0.5-0.93641)/(Tc*T)^0.5; % ableitung da nach dT

end

a=Fx;

b=0.077796*8.314*Tc/pc;

b_dach=b-8.314*T/P;

c_dach=(a-2*8.314*b*T-3*P*b^2)/P;

d_dach=(b^3*P+8.314*T*b^2-a*b)/P;

q_dach=b_dach^3/27-b_dach*c_dach/6+d_dach/2;

p_dach=c_dach/3-b_dach^2/9;

u=(-q_dach+sqrt(q_dach^2+p_dach^3))^(1/3);

v=(-q_dach-sqrt(q_dach^2+p_dach^3))^(1/3);

z=u+v;

vm=z-b_dach/3;

neu=((abl*(vm-b)-8.314*(vm^2+2*vm*b-b^2))*(vm-b)*(vm^2+2*vm*b-b^2))/(2*a*(vm+b)*(vm-b)^2-8.314*T*(vm^2+2*b*v-b^2)); % ableitung dv nach dT


l=vm*0.018-neu*T;

function int=int(P)

int=quad(@(P) l,0,P);

end
Out=int(P);
end
 
Private Nachricht senden Benutzer-Profile anzeigen


Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2011, 13:22     Titel:
  Antworten mit Zitat      
Hallo nochmal,
ich füge meiner Frage mal am besten noch die mathematische Gleichung bei, um die es sich handelt, damit es deutlicher wird, was ich meine:

Also zunächst bilde ich die Ableitung Ableitung von a nach T. In meinem Programm entspricht das der Gleichung "abl".

Am Ende möchte ich dann jedoch das Integral int((v-T*diff(v,T)),P,0,P) berechnen. % int(Funktion, Integrand, untere Grenze, obere Grenze)

diff(v,T) ist dabei = [(diff(a,T)*(v-b)-R*(v^2+2bv-b^2))*(v-b)*(v^2+2bv-b^2)] / [2a*(v+b)*(v-b)^2-RT*(v^2+2bv-b^2)]

und v ist von p abhängig, also v=v(P)
bei R,T,b und a handelt es sich um von p unabh. konstanten.
diff(v,T)= Ableitung von v nach T

Ich hoffe, dass es jetzt ein bisschen klarer ist, was ich versucht habe zu erklären.

Danke nochmals

MfG
Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.01.2011, 13:49     Titel:
  Antworten mit Zitat      
Hallo,

ein paar Anregungen:
- das Programm hierarchisch von oben nach unten strukturieren, mit der obersten Ebene anfangen.
- mit Unterfunktionen statt geschachtelten Funktionen arbeiten
- nicht Funktionsname auch als Dateiname verwenden. Das führt zu Verwirrungen.
- bei Problemen (z.B. Code läuft nicht, gibt falsche Ergebnisse) möglichst genau beschreiben, was nicht läuft (Fehlermeldung kopieren).

Das sollte meines Erachtens also so aussehen:
Code:
function inte = berechneIntegral
Parameter definieren
inte = quad(@(x) integrand(x, parameter), a, b, tol)
end
function y = integrand(x, parameter)
Berechnung des Integranden unter Verwendung von Hilfsfunktionen
end
function y = hilfe(x, parameter)
...
end


Sonst entsteht schnell ein Wust, durch den sich niemand mehr durchkämpfen mag.

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
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2011, 15:32     Titel:
  Antworten mit Zitat      
Hallo Harald,
danke für die Hinweise!

Wie ich das jedoch an Hand deines Beispieles verstehe, setze ich an den Stellen "Parameter" feste Werte ein. Jedoch möchte ich für mein T und P variable Werte haben, sie dem Programm also übergeben.
So wie ich es verstehe, muss ich dann doch am Anfang sagen

Code:

function inte = berechneIntegral (T,P)
 

und meine Datei dann entsprechend benennen, oder nicht?

MfG
Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.01.2011, 15:35     Titel:
  Antworten mit Zitat      
Genau.

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
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2011, 15:59     Titel:
  Antworten mit Zitat      
Ich muss nochmal bzgl. der Hilfsfunktionen nachfragen. Ich weiß nicht genau, was du damit meinst, also was ich mit den Hilfsfunktionen berechnen soll. V.a. weil sie ja auch, wie der integrand, durch y= def. sind.

MfG
Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

da käme in deinem Fall z.B. die Berechnung von Ableitungen rein - etwas, das zu komplex ist, als dass du es innerhalb der Funktion berechnen kannst/willst, oder das öfter gebraucht wird.

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
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2011, 16:02     Titel:
  Antworten mit Zitat      
Hallo,
mein Programm schaut jetzt wie folgt aus:

Code:

function inte = berechneIntegral (T,P)


inte = quad(@(P) integrand(T), 0, P);

end



function abl = ableitung(T)

Tc=647.096;

abl=(0.429094*(T/Tc)^0.5-0.93641)/(Tc*T)^0.5; % ableitung da nach dT

end

function integra = integrand (T)

A=-7.714;
B=1.315;
C=-2.514;
D=-1.725;
Tc=647.096;
pc=220.64E05;
ac=0.457232*8.314^2*Tc^2/pc;

ps=exp(1/0.7*(A*(1-0.7)+B*(1-0.7)^1.5+C*(1-0.7)^3+D*(1-0.7)^6));

w=-1-log10(ps);
   
Fx=ac*(1+(0.37464+1.54226*w-0.26992*w^2)*(T/Tc-1))^2;


a=Fx;

b=0.077796*8.314*Tc/pc;

b_dach=@(P) b-8.314*T/P;

c_dach=@(P) (a-2*8.314*b*T-3*P*b^2)/P;

d_dach=@(P) (b^3*P+8.314*T*b^2-a*b)/P;

q_dach=@(P) b_dach(P).^3/27-b_dach(P)*c_dach(P)./6+d_dach(P)./2;

p_dach=@(P) c_dach(P)./3-b_dach(P).^2/9;

u=@(P) (-q_dach(P)+sqrt(q_dach(P).^2+p_dach(P).^3)).^(1/3);

v=@(P) (-q_dach(P)-sqrt(q_dach(P).^2+p_dach(P).^3)).^(1/3);

z=@(P) u(P)+v(P);

vm=@(P) z(P)-b_dach(P)./3;

abl=ableitung(T);

integra=@(P)((abl*(vm(P)-b)-8.314*(vm(P).^2+2*vm(P)*b-b^2))*(vm(P)-b)*(vm(P).^2+2*vm(P)*b-b^2))/(2*a*(vm(P)+b)*(vm(P)-b)^2-8.314*T*(vm(P).^2+2*b*vm(P)-b^2)); % ableitung dv nach dT

end
 


er braucht jedoch zimelich lange zu rechnen und am Ende kommt dann auch die Meldung:

berechneIntegral(800,180e5)
Warning: Maximum function count exceeded; singularity likely.
> In quad at 106
In berechneIntegral at 18

ans =

-5.9046e+014

ich weiß jetzt auch nicht, ob ich es wirklich richtig geschrieben habe das Programm.

MfG
Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

in den ersten Zeilen ist schon mal ein Fehler:

Code:
function inte = berechneIntegral (T,P)
inte = quad(@(P) integrand(T), 0, P);
end

muss heißen

Code:
function inte = berechneIntegral (T,P)
inte = quad(@(T) integrand(T), 0, P);

oder
Code:
function inte = berechneIntegral (T,P)
inte = quad(@integrand, 0, P);


Wenn ich das dann laufen lasse, bekomme ich eine Fehlermeldung:

??? Error using ==> mpower
Inputs must be a scalar and a square matrix.
To compute elementwise POWER, use POWER (.^) instead.

Error in ==> berechneIntegral>integrand at 32
Fx=ac*(1+(0.37464+1.54226*w-0.26992*w^2)*(T/Tc-1))^2;

Error in ==> berechneIntegral>@(T)integrand(T) at 4
inte = quad(@(T) integrand(T), 0, P);

Sprich, du solltest darauf achten, statt *, /, ^ die entsprechenden komponentenweisen Operationen mit Punkt davor zu verwenden. Oder vielleicht hast du auch nur nicht die aktuelle Version deines Codes kopiert?

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
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2011, 16:25     Titel:
  Antworten mit Zitat      
ganz kurz nur, bevor ich mir den Rest anschaue:

warum muss es in der ersten Zeile

Code:

heißen, wenn ich ja über P integrieren will?

Das P ist sowohl die obere Integrationsgrenze, als die Integrationsvariable.Muss es dann nach dem @ nicht P heißen?

MfG
Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

es ist mathematisch nicht gerade sinnvoll, dass Integrationsvariable und eine der Schranken gleich sind.
Und warum nimmst du T und P als Eingabeparameter entgegen, wenn du doch deiner Meinung nach nur einen von beiden brauchst?

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
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2011, 17:21     Titel:
  Antworten mit Zitat      
Hallo,
also ich nehme T und P entgegen, weil ich meine Gleichung über P integriere und ich innerhalb des Integrals einen Therm nach T ableite.
Und T und P können dabei variieren.

Gruß,
Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dann ist T aber eine Art lokale Variable, die je nachdem, wo du das Integral auswertest, einen anderen Wert annimmt? Wieso übergibst du das dann von außen?

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
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2011, 16:23     Titel:
  Antworten mit Zitat      
Hallo,
also mal kurz als Erklärung:
Ich habe einen Kreisprozess und möchte Werte eines realen Gases berechnen. Dafür habe ich ein Simulink-Modell angelegt, dem ich aus einem GUI heraus bestimmte Parameter übergebe. Unter anderem an eine bestimmten Stelle ein von mir gewünschtes T (Temperatur) und P (Druck). Nach meinem T leite ich zunächst ab (hierbei handelt es sich um einen festen Wert nach der Ableitung) und über P integriere ich.
Ich habe mal die Formel angefügt. Bei v Tilde handelt es sich dabei um das normale v(ist von P abhängig).


Danke für die Hilfe!

MfG
Deniz

Formel.jpg
 Beschreibung:

Download
 Dateiname:  Formel.jpg
 Dateigröße:  39.96 KB
 Heruntergeladen:  583 mal
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 - 2025 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.