Matlab Script zum Aufrufen aller anderen Funktionen
Contents
Konvenionen für verwendete Vektoren und Matrizen:
Drücke werden mit p bezeichnet p(1)=p(CO) p(2)=p(H2O) p(3)=p(H2) p(4)=p(CO2) Aufagbe 4.1: p1 Aufgabe 4.2: p2 Längen tragen grundsätzlich ein x im Namen
clc; close all; clear all;
Aufgabe 4.1
tic; T=673.15; %Temperatur der Reaktion [K] xspan=[0 50]; %Länge des Reaktors [m] [x p1]=DGLfunc(T,xspan); %Aufruf der von 'DGLfunc' zur Rückgabe der Partialdrücke t1=toc; % Figure1: Verlauf der Partialdrücke fig1=figure(1); hold on; set(fig1,'Name','Verlauf der Partialdrücke'); %Name der figure wird geändert plot(x,p1) title('Verlauf der Partialdrücke'); xlabel('Länge x in m'); ylabel('Partialdruck p_i der Komponente i in bar'); legend('CO','H2O','H2','CO2')

Aufgabe 4.2
disp('#####################################################################') disp('Output von fmincon') tic; %w ist Opt.variable %w(1) ist die Temperatur %w(2) ist die Länge A=[]; b=[]; Aeq=[]; beq=[]; lb=[10;10]; %mind. 10m Länge und 10K Temperatur ub=[1000; 1000]; %max. 1000K und 1000m Länge %Bem.: lower and upper bound (lb, ub) werden nicht unbedingt benötigt options=optimset('display','final','algorithm','sqp'); %display 'final' bewirkt eine einmalige Ausgabe am Ende der Optimerung, die %anzeigt, warum fmincon die Suche beendet hat w0_fmincon=[673.15 50]; %Startbedingungen für Suche mit T=v0_fmincon(1) und x=v0_fmincon(2) disp('_____________________________________________________________________') disp('Aufgabe 4.2') [w,x,exitflag]= fmincon(@(w)zielfunc_fmincon1(w),w0_fmincon,A,b,Aeq,beq,lb,ub,@(w)nonlin1(w),options); t2=toc; %Zeitnahem für Berechnung von Aufgabe 4.2 [~,p2]=DGLfunc(w(1),[0 w(2)]);
##################################################################### Output von fmincon _____________________________________________________________________ Aufgabe 4.2 Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the default value of the step size tolerance and constraints are satisfied to within the default value of the constraint tolerance.
Aufgabe 4.3
Unterteilung des PFTR in acht äquidistante Abschnitte unter der idealisierten Annahme von konstanten Temperaturen
v ist die Optimierungsvariable v(1) ist die konstante Temperatur für Abschnit 1 ... v(8) ist die konstante Temperatur für Abschnit 8 v(9) ist die Länge
Startwertkombination
-Temperatur: entsprechen ungefähr der Lösung von Aufgabe 4.2 -Länge: entspricht ungefähr der Lösung von Aufgabe 4.2 -Kommentar: man kann sich zwar denken, dass die Länge kleiner werden muss, aber für einen ersten Verusch sind die Startwerte durchaus vertretbar
tic; A=[]; b=[]; Aeq=[]; beq=[]; lb=[10;10;10;10;10;10;10;10;1]; ub=[1000;1000;1000;1000;1000;1000;1000;1000;200]; options=optimset('display','final-detailed','algorithm','sqp','MaxIter',5000,'MaxFunEvals',5000,'TolX',1e-10,'TolCon',1e-10,'TolFun',1e-10); %display 'final-detailed' bewirkt eine etwas ausfürliche Ausgabe des %Grundes warum fmincon gestoppt hat. Zum Beispiel Ausgabe der %unterschritenen Toleranzen usw. %MaxIter: Erhöht die Anzahl der maximalen Iterationen [Standard: 3000] %MaxFunEvals: maximale Anzahl der Funktionsaufrufe [Standard: #variables*100=900] %TolX: maximale Abweichung für Opt.var. [Standard: 1e-6] %TolCon: Toleranz für die Verletzung der Nebenbedingungen [Standard: 1e-6] %TolFun: Toleranz für die Abweichung des Funtionwertes selber [Standard: 1e-6] %alles weitere und viel genauer in der Matlab Hilfe unter: %fmincon->Options->All Algorithms v0_fmincon=[600 600 600 600 600 600 600 600 100]; %Startbedingungen für Suche disp('_____________________________________________________________________') disp('Aufgabe 4.3') [v,x_end,exitflag] = fmincon(@(v)zielfunc_fmincon2(v),v0_fmincon,A,b,Aeq,beq,lb,ub,@(v)nonlin2(v),options); t3=toc; %zum Plot des Ergebnisses DGLfunc_end(v,true);
_____________________________________________________________________ Aufgabe 4.3 Optimization stopped because the relative changes in all elements of x are less than options.TolX = 1.000000e-10, and the relative maximum constraint violation, 4.579670e-16, is less than options.TolCon = 1.000000e-10. Optimization Metric Options max(abs(delta_x./x)) = 7.89e-11 TolX = 1e-10 (selected) relative max(constraint violation) = 4.58e-16 TolCon = 1e-10 (selected)

Ausgaben:
%4.1 fprintf('\n \n'); disp('#####################################################################') disp('Ausgabe aller ermittelten Ergebnisse') disp('_____________________________________________________________________') disp('Aufgabe 4.1'); disp(['Partialdruck CO am Ende des PFTR: ',num2str(p1(end,1),'% 10.6f'),'bar']); disp(['Dauer: ',num2str(t1),'s']) fprintf('\n'); %leere Zeile %4.2 disp('_____________________________________________________________________') disp('Aufgabe 4.2') disp(['Länge: ',num2str(w(2)), 'm']); disp(['Temperatur: ',num2str(w(1)), 'K']); disp(['Partialdruck CO am Ende des PFTR: ',num2str(p2(end,1),'% 10.6f'),'bar']) disp(['EXITFLAG beachten: ',num2str(exitflag)]); disp(['Dauer: ',num2str(t2),'s']); fprintf('\n'); %leere Zeile %4.3 disp('_____________________________________________________________________') disp('Aufgabe 4.3') for i=1:8 disp(['Temperatur(',num2str(i),')',': ',num2str(v(i)), 'K']); end disp(['Partialdruck CO am Ende des PFTR: ',num2str(DGLfunc_end(v,false),'% 10.6f'),'bar']) disp(['Länge des PFTR: ',num2str(x_end),'m']) disp(['EXITFLAG beachten: ',num2str(exitflag)]); disp(['Dauer: ',num2str(t3),'s'])
##################################################################### Ausgabe aller ermittelten Ergebnisse _____________________________________________________________________ Aufgabe 4.1 Partialdruck CO am Ende des PFTR: 0.027758bar Dauer: 0.49298s _____________________________________________________________________ Aufgabe 4.2 Länge: 96.1777m Temperatur: 600.2628K Partialdruck CO am Ende des PFTR: 0.015000bar EXITFLAG beachten: 2 Dauer: 5.4876s _____________________________________________________________________ Aufgabe 4.3 Temperatur(1): 668.2245K Temperatur(2): 631.1772K Temperatur(3): 615.2621K Temperatur(4): 605.9297K Temperatur(5): 599.4594K Temperatur(6): 594.547K Temperatur(7): 590.6057K Temperatur(8): 587.3241K Partialdruck CO am Ende des PFTR: 0.015000bar Länge des PFTR: 26.2441m EXITFLAG beachten: 2 Dauer: 43.2619s