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