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

In Funktion auf Workspace zugreifen

 

Benni84
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 12.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2011, 16:18     Titel: In Funktion auf Workspace zugreifen
  Antworten mit Zitat      
Hallo zusammen,

ich würde gern eine Funktion y schon im Workspace definieren und in der Funktion f mit input x und output y, dann auf die im Workspace definierte Funktion y verweisen.

Könnte mir dabei jemand weiterhelfen?

Würde mich sehr freuen, viele Grüße,
Benni
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: 14.03.2011, 21:50     Titel: Re: In Funktion auf Workspace zugreifen
  Antworten mit Zitat      
Hallo Benni84,

Ich verstehe Deine Frage nicht.
Wie kann man eine Funktion in einem WorkSpace definieren? Möchtest Du einen Function_Handle verwenden oder eine anonyme Funktion?
Was ist "im Workspace"? Jede Funktion hat ihren eigenen Workspace. Meinst Du den Base-Workspace in der Commando-Zeile?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 12.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2011, 23:15     Titel:
  Antworten mit Zitat      
Ja, ich meine den Base-Workspace, sorry.

Das Problem ist, dass die Dimension meiner Funktion f variabel ist und meine Funktion aus mehreren Ableitungen besteht. Und ich zur Berechnung der Funktion noch eine QR_Zerlegung vornehmen muss. Will das ungern alles in meine function-file packen, sondern gewisse Vorberechnungen schon im Vorfeld erledigen und dann in der Function-File nur noch darauf verweisen.

Habe schon erfahren, dass es keine symbolische QR_Zerlegung gibt, ich die Zerlegung also innerhalb der function vornehme.

Naja, so schrecklich lang ist zur Zeit meine Function-File, und ich würde sie gern etwas verkleinern, damit auch bei der Lösung meines Optimierungsproblems mit dieser Funktion als Zielfunktion nicht immer alles neu berechnet werden muss.

Grüße,
Benni







%Definition der Zielfunktion ZF_q0 des Versuchplanungsroblems, mit dem
%Zielfunktionswert y als Output und den Startwerten zu den
%Optimierungsvariablen z=(c,h,q) und den Werten zu den
%Ratenkonstanten p=(p1,...,pm7) als Input der Funktion.
function [ y ] = ZF_q0( z,p1,p2,p3,p4,p5,p6,p7,pm1,pm2,pm3,pm4,pm5,pm6,pm7)
%1. Grundlegendes.
%1.1 n steht für die Anzahl an Bifurkationspunkten.
n=1; %Optional kann auch mit folgendem Befehl der Inputwert abgefragt
%werden: "n=input('Wieviele Bifurkationspunkte wollen wir ermitteln?');"

%1.2 m steht für die Anzahl an Optimierungsvariablen.
m=9*n+9*n+5*n;

%1.3 Deklaration des Variablenvektors x=[x1,...,xm]
x=sym('x','real');
x=sym(zeros(1,m));
for i=1:m
syms(['x' num2str(i)],'real');
x(i)=eval(['x' num2str(i)]);
end
%x((j-1)*n+i) mit i=1,...,n steht für:
%j=1,...,9 für die k-te Konzentration c im i-ten Bifurkationspunkt(BP),
%j=10,...,18 für den k-ten Eintrag von h im i-ten BP,
%j=19,...,23 für den m-ten Experimentalparameter im i-ten BP, mit
%k=1,...,9 und m=1,...,5.



%2. Erzeugung der 1.Jacobimatrix J1.
%2.1 Deklaration der Matrix J1.
J1=sym('J1','real');

%2.2 Deklaration der Entscheidungsvariablen wi, i=1,...,n
%WERDEN WIR SPÄTER IN VEKTOR X AUFNEHMEN. MÜßEN WIR NOCH IN DIE
%JACOBIMATRIX EINBINDEN: SUMME WI = n/2 Z.B..
w=sym('w','real');
w=sym(zeros(1,n));
for i=1:n
syms(['w' num2str(i)],'real');
w(i)=eval(['w' num2str(i)]);
end

%2.3 Deklaration der Ableitungen von F1.
teta=zeros(1,5*n); %An der Stelle (j-1)*n + i von teta steht die
%Standarbweichung des j-ten Experimentalparameters im i-ten BP.
%Wir nehmen hier an, dass die Standarbweichung sich nur für die
%Experimentalparameter(EP), nicht aber innerhalb der BP unterscheiden.
tetaq1=1; %Optional die Abfrage der Standardabweichungen über den Befehl:
%tetaq1=input('Geben sie die Standardabweichung des 1.EP an:')%
for i=1:n
teta(i)=-1/tetaq1;
end
tetaq2=2; %tetaq2=input('Geben sie die Standardabweichung des 2.EP an:')%
for i=(n+1):2*n
teta(i)=-1/tetaq2;
end
tetaq3=4; %tetaq3=input('Geben sie die Standardabweichung des 3.EP an:')%
for i=(2*n+1):3*n
teta(i)=-1/tetaq3;
end
tetaq4=8; %tetaq4=input('Geben sie die Standardabweichung des 4.EP an:')%
for i=(3*n+1):4*n
teta(i)=-1/tetaq4;
end
tetaq5=16; %tetaq5=input('Geben sie die Standardabweichung des 5.EP an:')%
for i=(4*n+1):5*n
teta(i)=-1/tetaq5;
end

%2.4 Berechnung der Matrix J1.
for i=1:n
for j=1:n
for m=1:18
for o=1:5
J1((j-1)*5+o,(i-1)*23+m)=0; %Die Einträge von J1 sind für die
%Ableitungen nach c und h = 0.
end
end
for m=19:23
for o=1:5
if (m-1Cool==o && i==j %Die Ableitung ist nur ungleich
%0, wenn die Variable des i.ten Bifurkationspunkt
%auch nach diesem Punkt abgeleitet wird.
J1((j-1)*5+o,(i-1)*23+m)=teta((o-1)*n+1);
else %Ansonsten ist die Ableitung = 0.
J1((j-1)*5+o,(i-1)*23+m)=0;
end
end
end
end
end



%3. Erzeugung der 2.Jacobimatrix J2.
%3.1 Deklaration der Matrix J2.
J2=sym('J2','real');

%3.2 Deklaration der Funktionen der Nebenbedingunen
%F2=[(f1,...,f9),(df1/dc*h1,...,df9/dc*h9),h'*h-1]
%H'*H-1 MUSS NOCH IN DIE NEBENBEDINGUNGEN AUFGENOMMEN WERDEN.
f1=sym('f1','real');
f2=sym('f2','real');
f3=sym('f3','real');
f4=sym('f4','real');
f5=sym('f5','real');
f6=sym('f6','real');
f7=sym('f7','real');
f8=sym('f8','real');
f9=sym('f9','real');
f1c=sym('f1c','real');
f2c=sym('f2c','real');
f3c=sym('f3c','real');
f4c=sym('f4c','real');
f5c=sym('f5c','real');
f6c=sym('f6c','real');
f7c=sym('f7c','real');
f8c=sym('f8c','real');
f9c=sym('f9c','real');
f1ch=sym('f1ch','real');
f2ch=sym('f2ch','real');
f3ch=sym('f3ch','real');
f4ch=sym('f4ch','real');
f5ch=sym('f5ch','real');
f6ch=sym('f6ch','real');
f7ch=sym('f7ch','real');
f8ch=sym('f8ch','real');
f9ch=sym('f9ch','real');

%3.3 Berechnung der Nebenbedingungen aus dem NFT-Mechanismus
for i=1:n %Berechnung nach den n Bifurkationspunkten.
%Berechnung der 9*n Stationaritätsbedingungen
f1(i) = x(3*n+i)^2*pm2 - x(0+i)*x(18*n+i) + x(5*n+i)^2*pm4 - x(0+i)*x(3*n+i)*pm1 - x(0+i)*x(8*n+i)*pm5 - 2*x(0+i)^2*p7 + x(n+i)*x(2*n+i)*x(7*n+i)^2*p1 - x(0+i)*x(2*n+i)*x(7*n+i)*p2 - x(0+i)*x(n+i)*x(7*n+i)*p4 + x(5*n+i)*x(6*n+i)*x(7*n+i)*p5 + 2*x(n+i)*x(3*n+i)*x(7*n+i)*pm7;
f2(i)=-p1*x(1*n+i)*x(2*n+i)*x(7*n+i)^2+pm1*x(0*n+i)*x(3*n+i)-p4*x(0*n+i)*x(1*n+i)*x(7*n+i)+pm4*x(5*n+i)^2+p6*x(5*n+i)*x(8*n+i)-pm6*x(1*n+i)*x(6*n+i)*x(7*n+i)^2+p7*x(0*n+i)^2-pm7*x(1*n+i)*x(3*n+i)*x(7*n+i)-x(18*n+i)*(x(1*n+i)-x(19*n+i));
f3(i)=-pm1*x(1*n+i)*x(2*n+i)*x(7*n+i)^2+pm1*x(0*n+i)*x(3*n+i)-p2*x(0*n+i)*x(2*n+i)*x(7*n+i)+pm2*x(3*n+i)^2-p3*x(2*n+i)*x(3*n+i)*x(7*n+i)+pm3*x(4*n+i)-x(18*n+i)*(x(2*n+i)-x(20*n+i));
f4(i)=p1*x(1*n+i)*x(2*n+i)*x(7*n+i)-pm1*x(0*n+i)*x(3*n+i)+2*p2*x(0*n+i)*x(2*n+i)*x(7*n+i)-2*pm2*x(3*n+i)^2-p3*x(2*n+i)*x(3*n+i)*x(7*n+i)+pm3*x(4*n+i)+p7*x(0*n+i)^2-pm7*x(1*n+i)*x(3*n+i)*x(7*n+i)-x(18*n+i)*x(3*n+i);
f5(i)=p3*x(2*n+i)*x(3*n+i)*x(7*n+i)-pm3*x(4*n+i)-x(18*n+i)*x(4*n+i);
f6(i)=2*p4*x(0*n+i)*x(1*n+i)*x(7*n+i)-2*pm4*x(5*n+i)^2-p5*x(5*n+i)*x(6*n+i)*x(7*n+i)+pm5*x(0*n+i)*x(8*n+i)-p6*x(5*n+i)*x(8*n+i)+pm6*x(1*n+i)*x(6*n+i)*x(7*n+i)^2-x(18*n+i)*x(5*n+i);
f7(i)=p5*x(5*n+i)*x(6*n+i)*x(7*n+i)+pm5*x(0*n+i)*x(8*n+i)+p6*x(5*n+i)*x(8*n+i)-pm6*x(1*n+i)*x(6*n+i)*x(7*n+i)^2-x(18*n+i)*(x(6*n+i)-x(21*n+i));
f8(i)=-2*p1*x(1*n+i)*x(2*n+i)*x(7*n+i)^2+2*pm1*x(0*n+i)*x(3*n+i)-p2*x(0*n+i)*x(2*n+i)*x(7*n+i)+pm2*x(3*n+i)^2-p3*x(2*n+i)*x(3*n+i)*x(7*n+i)+pm3*x(4*n+i)-p4*x(0*n+i)*x(1*n+i)*x(7*n+i)+pm4*x(5*n+i)^2-p5*x(5*n+i)*x(6*n+i)*x(7*n+i)+pm5*x(0*n+i)*x(8*n+i)+2*p6*x(5*n+i)*x(8*n+i)-2*pm6*x(1*n+i)*x(6*n+i)*x(7*n+i)^2+p7*x(0*n+i)^2-pm7*x(1*n+i)*x(3*n+i)*x(7*n+i)-x(18*n+i)*(x(7*n+i)-x(22*n+i));
f9(i)=p5*x(5*n+i)*x(6*n+i)*x(7*n+i)-pm5*x(0*n+i)*x(8*n+i)-p6*x(5*n+i)*x(8*n+i)+pm6*x(1*n+i)*x(6*n+i)*x(7*n+i)^2-x(18*n+i)*x(8*n+i);
%Nun folgt die jeweilige Ableitung nach c und Multiplikation mit h.
f1c(1,i)=diff(f1(i),x(0*n+i))*x(9*n+i);
f1c(2,i)=diff(f1(i),x(1*n+i))*x(10*n+i);
f1c(3,i)=diff(f1(i),x(2*n+i))*x(11*n+i);
f1c(4,i)=diff(f1(i),x(3*n+i))*x(12*n+i);
f1c(5,i)=diff(f1(i),x(4*n+i))*x(13*n+i);
f1c(6,i)=diff(f1(i),x(5*n+i))*x(14*n+i);
f1c(7,i)=diff(f1(i),x(6*n+i))*x(15*n+i);
f1c(8,i)=diff(f1(i),x(7*n+i))*x(16*n+i);
f1c(9,i)=diff(f1(i),x(8*n+i))*x(17*n+i);
f2c(1,i)=diff(f2(i),x(0*n+i))*x(9*n+i);
f2c(2,i)=diff(f2(i),x(1*n+i))*x(10*n+i);
f2c(3,i)=diff(f2(i),x(2*n+i))*x(11*n+i);
f2c(4,i)=diff(f2(i),x(3*n+i))*x(12*n+i);
f2c(5,i)=diff(f2(i),x(4*n+i))*x(13*n+i);
f2c(6,i)=diff(f2(i),x(5*n+i))*x(14*n+i);
f2c(7,i)=diff(f2(i),x(6*n+i))*x(15*n+i);
f2c(8,i)=diff(f2(i),x(7*n+i))*x(16*n+i);
f2c(9,i)=diff(f2(i),x(8*n+i))*x(17*n+i);
f3c(1,i)=diff(f3(i),x(0*n+i))*x(9*n+i);
f3c(2,i)=diff(f3(i),x(1*n+i))*x(10*n+i);
f3c(3,i)=diff(f3(i),x(2*n+i))*x(11*n+i);
f3c(4,i)=diff(f3(i),x(3*n+i))*x(12*n+i);
f3c(5,i)=diff(f3(i),x(4*n+i))*x(13*n+i);
f3c(6,i)=diff(f3(i),x(5*n+i))*x(14*n+i);
f3c(7,i)=diff(f3(i),x(6*n+i))*x(15*n+i);
f3c(8,i)=diff(f3(i),x(7*n+i))*x(16*n+i);
f3c(9,i)=diff(f3(i),x(8*n+i))*x(17*n+i);
f4c(1,i)=diff(f4(i),x(0*n+i))*x(9*n+i);
f4c(2,i)=diff(f4(i),x(1*n+i))*x(10*n+i);
f4c(3,i)=diff(f4(i),x(2*n+i))*x(11*n+i);
f4c(4,i)=diff(f4(i),x(3*n+i))*x(12*n+i);
f4c(5,i)=diff(f4(i),x(4*n+i))*x(13*n+i);
f4c(6,i)=diff(f4(i),x(5*n+i))*x(14*n+i);
f4c(7,i)=diff(f4(i),x(6*n+i))*x(15*n+i);
f4c(8,i)=diff(f4(i),x(7*n+i))*x(16*n+i);
f4c(9,i)=diff(f4(i),x(8*n+i))*x(17*n+i);
f5c(1,i)=diff(f5(i),x(0*n+i))*x(9*n+i);
f5c(2,i)=diff(f5(i),x(1*n+i))*x(10*n+i);
f5c(3,i)=diff(f5(i),x(2*n+i))*x(11*n+i);
f5c(4,i)=diff(f5(i),x(3*n+i))*x(12*n+i);
f5c(5,i)=diff(f5(i),x(4*n+i))*x(13*n+i);
f5c(6,i)=diff(f5(i),x(5*n+i))*x(14*n+i);
f5c(7,i)=diff(f5(i),x(6*n+i))*x(15*n+i);
f5c(8,i)=diff(f5(i),x(7*n+i))*x(16*n+i);
f5c(9,i)=diff(f5(i),x(8*n+i))*x(17*n+i);
f6c(1,i)=diff(f6(i),x(0*n+i))*x(9*n+i);
f6c(2,i)=diff(f6(i),x(1*n+i))*x(10*n+i);
f6c(3,i)=diff(f6(i),x(2*n+i))*x(11*n+i);
f6c(4,i)=diff(f6(i),x(3*n+i))*x(12*n+i);
f6c(5,i)=diff(f6(i),x(4*n+i))*x(13*n+i);
f6c(6,i)=diff(f6(i),x(5*n+i))*x(14*n+i);
f6c(7,i)=diff(f6(i),x(6*n+i))*x(15*n+i);
f6c(8,i)=diff(f6(i),x(7*n+i))*x(16*n+i);
f6c(9,i)=diff(f6(i),x(8*n+i))*x(17*n+i);
f7c(1,i)=diff(f7(i),x(0*n+i))*x(9*n+i);
f7c(2,i)=diff(f7(i),x(1*n+i))*x(10*n+i);
f7c(3,i)=diff(f7(i),x(2*n+i))*x(11*n+i);
f7c(4,i)=diff(f7(i),x(3*n+i))*x(12*n+i);
f7c(5,i)=diff(f7(i),x(4*n+i))*x(13*n+i);
f7c(6,i)=diff(f7(i),x(5*n+i))*x(14*n+i);
f7c(7,i)=diff(f7(i),x(6*n+i))*x(15*n+i);
f7c(8,i)=diff(f7(i),x(7*n+i))*x(16*n+i);
f7c(9,i)=diff(f7(i),x(8*n+i))*x(17*n+i);
f8c(1,i)=diff(f8(i),x(0*n+i))*x(9*n+i);
f8c(2,i)=diff(f8(i),x(1*n+i))*x(10*n+i);
f8c(3,i)=diff(f8(i),x(2*n+i))*x(11*n+i);
f8c(4,i)=diff(f8(i),x(3*n+i))*x(12*n+i);
f8c(5,i)=diff(f8(i),x(4*n+i))*x(13*n+i);
f8c(6,i)=diff(f8(i),x(5*n+i))*x(14*n+i);
f8c(7,i)=diff(f8(i),x(6*n+i))*x(15*n+i);
f8c(8,i)=diff(f8(i),x(7*n+i))*x(16*n+i);
f8c(9,i)=diff(f8(i),x(8*n+i))*x(17*n+i);
f9c(1,i)=diff(f9(i),x(0*n+i))*x(9*n+i);
f9c(2,i)=diff(f9(i),x(1*n+i))*x(10*n+i);
f9c(3,i)=diff(f9(i),x(2*n+i))*x(11*n+i);
f9c(4,i)=diff(f9(i),x(3*n+i))*x(12*n+i);
f9c(5,i)=diff(f9(i),x(4*n+i))*x(13*n+i);
f9c(6,i)=diff(f9(i),x(5*n+i))*x(14*n+i);
f9c(7,i)=diff(f9(i),x(6*n+i))*x(15*n+i);
f9c(8,i)=diff(f9(i),x(7*n+i))*x(16*n+i);
f9c(9,i)=diff(f9(i),x(8*n+i))*x(17*n+i);
%Schließlich die Berechnung der 9*n + 1*n Instabilitätsbedingungen.
f1ch(i)=f1c(1,i)+f1c(2,i)+f1c(3,i)+f1c(4,i)+f1c(5,i)+f1c(6,i)+f1c(7,i)+f1c(8,i)+f1c(9,i);
f2ch(i)=f2c(1,i)+f2c(2,i)+f2c(3,i)+f2c(4,i)+f2c(5,i)+f2c(6,i)+f2c(7,i)+f2c(8,i)+f2c(9,i);
f3ch(i)=f3c(1,i)+f3c(2,i)+f3c(3,i)+f3c(4,i)+f3c(5,i)+f3c(6,i)+f3c(7,i)+f3c(8,i)+f3c(9,i);
f4ch(i)=f4c(1,i)+f4c(2,i)+f4c(3,i)+f4c(4,i)+f4c(5,i)+f4c(6,i)+f4c(7,i)+f4c(8,i)+f4c(9,i);
f5ch(i)=f5c(1,i)+f5c(2,i)+f5c(3,i)+f5c(4,i)+f5c(5,i)+f5c(6,i)+f5c(7,i)+f5c(8,i)+f5c(9,i);
f6ch(i)=f6c(1,i)+f6c(2,i)+f6c(3,i)+f6c(4,i)+f6c(5,i)+f6c(6,i)+f6c(7,i)+f6c(8,i)+f6c(9,i);
f7ch(i)=f7c(1,i)+f7c(2,i)+f7c(3,i)+f7c(4,i)+f7c(5,i)+f7c(6,i)+f7c(7,i)+f7c(8,i)+f7c(9,i);
f8ch(i)=f8c(1,i)+f8c(2,i)+f8c(3,i)+f8c(4,i)+f8c(5,i)+f8c(6,i)+f8c(7,i)+f8c(8,i)+f8c(9,i);
f9ch(i)=f9c(1,i)+f9c(2,i)+f9c(3,i)+f9c(4,i)+f9c(5,i)+f9c(6,i)+f9c(7,i)+f9c(8,i)+f9c(9,i);
%DIE 10.TE NEBENBEDINGUNG H'H-1 FEHLT NOCH.
end

%3.4 Berechnung der Matrix J2.
for i=1:n
for j=1:n
for k=1:23 %Berechnung der Ableitungen.
J2((j-1)*18+1,(i-1)*23+k)=diff(f1(j),x((k-1)*n+i));
J2((j-1)*18+2,(i-1)*23+k)=diff(f2(j),x((k-1)*n+i));
J2((j-1)*18+3,(i-1)*23+k)=diff(f3(j),x((k-1)*n+i));
J2((j-1)*18+4,(i-1)*23+k)=diff(f4(j),x((k-1)*n+i));
J2((j-1)*18+5,(i-1)*23+k)=diff(f5(j),x((k-1)*n+i));
J2((j-1)*18+6,(i-1)*23+k)=diff(f6(j),x((k-1)*n+i));
J2((j-1)*18+7,(i-1)*23+k)=diff(f7(j),x((k-1)*n+i));
J2((j-1)*18+8,(i-1)*23+k)=diff(f8(j),x((k-1)*n+i));
J2((j-1)*18+9,(i-1)*23+k)=diff(f9(j),x((k-1)*n+i));
J2((j-1)*18+10,(i-1)*23+k)=diff(f1ch(j),x((k-1)*n+i));
J2((j-1)*18+11,(i-1)*23+k)=diff(f2ch(j),x((k-1)*n+i));
J2((j-1)*18+12,(i-1)*23+k)=diff(f3ch(j),x((k-1)*n+i));
J2((j-1)*18+13,(i-1)*23+k)=diff(f4ch(j),x((k-1)*n+i));
J2((j-1)*18+14,(i-1)*23+k)=diff(f5ch(j),x((k-1)*n+i));
J2((j-1)*18+15,(i-1)*23+k)=diff(f6ch(j),x((k-1)*n+i));
J2((j-1)*18+16,(i-1)*23+k)=diff(f7ch(j),x((k-1)*n+i));
J2((j-1)*18+17,(i-1)*23+k)=diff(f8ch(j),x((k-1)*n+i));
J2((j-1)*18+18,(i-1)*23+k)=diff(f9ch(j),x((k-1)*n+i));
end
end
end



%4. Erzeugung der Kovarianzmatrix C nach Kapitel 4.1 -
% Numerische Analyse der Kovarianzmatrix.
%4.1 Grundlegendes
o=m; %o steht für die Dimension n der Optimierungsvariablen.
r=18*n; %r steht für die Dimension n2 der Funktion Nebenbedingungen.
q=5*n; %q steht für die Dimension n1 der Zielfunktion.
s=5*n; %s steht für n-n2. R UND Q MIT 19.NB NOCH ÄNDERN.

%4.2 Berechnung der Nullmatrizen
for i=1:r
for j=1:r
Null1(i,j)=0; %Nullmatrix mit Dimension n2 x n2.
end
end
for i=1:r
for j=1:q
Null2(i,j)=0; %Nullmatrix mit Dimension n2 x n1.
end
end
for i=1:q
for j=1:r
Null3(i,j)=0; %Nullmatrix mit Dimension n1 x n2.
end
end

%4.3 Übergabe der Inputwerte
x=z %Die Inputwerte können erst nach der Berechnungen der Ableitungen
%übergeben werden
%PROBLEM: XI IST EINE VARIABLE. BRAUCHEN ZUR QR-ZERLEGUNG NUMERISCHE
%WERTE. MÜ?EN ALSO DIE WERTE VON X NOCH ÜBERGEBEN.
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);
x5=x(5);
x6=x(6);
x7=x(7);
x8=x(Cool;
x9=x(9);
x10=x(10);
x11=x(11);
x12=x(12);
x13=x(13);
x14=x(14);
x15=x(15);
x16=x(16);
x17=x(17);
x18=x(1Cool;
x19=x(19);
x20=x(20);
x21=x(21);
x22=x(22);
x23=x(23);
%Wir substituieren nun die Werte.
J1=subs(J1);
J2=subs(J2);
J2T=J2';

%4.4 Die QR-Zerlegung
%Da nun eine numerische Matrix vorliegt, kann die QR-Zerlegung
%vorgenommen werden:
[Q,R]=qr(J2T);
%Mit
L=R';
%erhalten wir die untere Dreiecksmatrix L1=L' über L=[L1,LNull]:
for i=1:r
for j=1:r
L1(i,j)=L(i,j);
end
end
for i=1:r
for j=1Sado-r)
LNull(i,j)=0;
end
end
%Nun folgt die Zerlegung von Q in Q1 und Q2.
for i=1Surprised
for j=1:r
Q1(i,j)=Q(i,j);
end
end
for i=1Surprised
for j=1:q
Q2(i,j)=Q(i,r+j);
end
end

%4.5 Die Eigenwertzerlegung
%Wir definieren
J1quer=J1*Q2;
%und zerlegen J1quer:
[U,S,V]=svd(J1quer);
VT=V';
QT=Q';

%4.6 Die Berechnung der Kovarianzmatrix
C=subs(Q*[Null1,Null2;Null3,((V*inv(S'*S))*VT)])*QT;

%4.7 Die Zielfunktion des Versuchsplanungsproblems
y=C(1,1)+C(2,2)+C(3,3)+C(4,4)+C(5,5)+C(6,6)+C(7,7)+C(8,Cool+C(9,9)+C(10,10)+C(11,11)+C(12,12)+C(13,13)+C(14,14)+C(15,15)+C(16,16)+C(17,17)+C(18,1Cool+C(19,19)+C(20,20)+C(21,21)+C(22,22)+C(23,23)

%ALTERNATIV NOCH EINE AUTOMATISCHE BERECHNUNG ÜBER:
%spur=0;
%for i=1:n*23
% spur=spur+C(i,i);
%end
end








%Definition der Zielfunktion ZF_q0 des Versuchplanungsroblems, mit dem
%Zielfunktionswert y als Output und den Startwerten zu den
%Optimierungsvariablen z=(c,h,q) und den Werten zu den
%Ratenkonstanten p=(p1,...,pm7) als Input der Funktion.
function [ y ] = ZF_q0( z,p1,p2,p3,p4,p5,p6,p7,pm1,pm2,pm3,pm4,pm5,pm6,pm7)
%1. Grundlegendes.
%1.1 n steht für die Anzahl an Bifurkationspunkten.
n=1; %Optional kann auch mit folgendem Befehl der Inputwert abgefragt
%werden: "n=input('Wieviele Bifurkationspunkte wollen wir ermitteln?');"

%1.2 m steht für die Anzahl an Optimierungsvariablen.
m=9*n+9*n+5*n;

%1.3 Deklaration des Variablenvektors x=[x1,...,xm]
x=sym('x','real');
x=sym(zeros(1,m));
for i=1:m
syms(['x' num2str(i)],'real');
x(i)=eval(['x' num2str(i)]);
end
%x((j-1)*n+i) mit i=1,...,n steht für:
%j=1,...,9 für die k-te Konzentration c im i-ten Bifurkationspunkt(BP),
%j=10,...,18 für den k-ten Eintrag von h im i-ten BP,
%j=19,...,23 für den m-ten Experimentalparameter im i-ten BP, mit
%k=1,...,9 und m=1,...,5.



%2. Erzeugung der 1.Jacobimatrix J1.
%2.1 Deklaration der Matrix J1.
J1=sym('J1','real');

%2.2 Deklaration der Entscheidungsvariablen wi, i=1,...,n
%WERDEN WIR SPÄTER IN VEKTOR X AUFNEHMEN. MÜßEN WIR NOCH IN DIE
%JACOBIMATRIX EINBINDEN: SUMME WI = n/2 Z.B..
w=sym('w','real');
w=sym(zeros(1,n));
for i=1:n
syms(['w' num2str(i)],'real');
w(i)=eval(['w' num2str(i)]);
end

%2.3 Deklaration der Ableitungen von F1.
teta=zeros(1,5*n); %An der Stelle (j-1)*n + i von teta steht die
%Standarbweichung des j-ten Experimentalparameters im i-ten BP.
%Wir nehmen hier an, dass die Standarbweichung sich nur für die
%Experimentalparameter(EP), nicht aber innerhalb der BP unterscheiden.
tetaq1=1; %Optional die Abfrage der Standardabweichungen über den Befehl:
%tetaq1=input('Geben sie die Standardabweichung des 1.EP an:')%
for i=1:n
teta(i)=-1/tetaq1;
end
tetaq2=2; %tetaq2=input('Geben sie die Standardabweichung des 2.EP an:')%
for i=(n+1):2*n
teta(i)=-1/tetaq2;
end
tetaq3=4; %tetaq3=input('Geben sie die Standardabweichung des 3.EP an:')%
for i=(2*n+1):3*n
teta(i)=-1/tetaq3;
end
tetaq4=8; %tetaq4=input('Geben sie die Standardabweichung des 4.EP an:')%
for i=(3*n+1):4*n
teta(i)=-1/tetaq4;
end
tetaq5=16; %tetaq5=input('Geben sie die Standardabweichung des 5.EP an:')%
for i=(4*n+1):5*n
teta(i)=-1/tetaq5;
end

%2.4 Berechnung der Matrix J1.
for i=1:n
for j=1:n
for m=1:18
for o=1:5
J1((j-1)*5+o,(i-1)*23+m)=0; %Die Einträge von J1 sind für die
%Ableitungen nach c und h = 0.
end
end
for m=19:23
for o=1:5
if (m-1Cool==o && i==j %Die Ableitung ist nur ungleich
%0, wenn die Variable des i.ten Bifurkationspunkt
%auch nach diesem Punkt abgeleitet wird.
J1((j-1)*5+o,(i-1)*23+m)=teta((o-1)*n+1);
else %Ansonsten ist die Ableitung = 0.
J1((j-1)*5+o,(i-1)*23+m)=0;
end
end
end
end
end



%3. Erzeugung der 2.Jacobimatrix J2.
%3.1 Deklaration der Matrix J2.
J2=sym('J2','real');

%3.2 Deklaration der Funktionen der Nebenbedingunen
%F2=[(f1,...,f9),(df1/dc*h1,...,df9/dc*h9),h'*h-1]
%H'*H-1 MUSS NOCH IN DIE NEBENBEDINGUNGEN AUFGENOMMEN WERDEN.
f1=sym('f1','real');
f2=sym('f2','real');
f3=sym('f3','real');
f4=sym('f4','real');
f5=sym('f5','real');
f6=sym('f6','real');
f7=sym('f7','real');
f8=sym('f8','real');
f9=sym('f9','real');
f1c=sym('f1c','real');
f2c=sym('f2c','real');
f3c=sym('f3c','real');
f4c=sym('f4c','real');
f5c=sym('f5c','real');
f6c=sym('f6c','real');
f7c=sym('f7c','real');
f8c=sym('f8c','real');
f9c=sym('f9c','real');
f1ch=sym('f1ch','real');
f2ch=sym('f2ch','real');
f3ch=sym('f3ch','real');
f4ch=sym('f4ch','real');
f5ch=sym('f5ch','real');
f6ch=sym('f6ch','real');
f7ch=sym('f7ch','real');
f8ch=sym('f8ch','real');
f9ch=sym('f9ch','real');

%3.3 Berechnung der Nebenbedingungen aus dem NFT-Mechanismus
for i=1:n %Berechnung nach den n Bifurkationspunkten.
%Berechnung der 9*n Stationaritätsbedingungen
f1(i) = x(3*n+i)^2*pm2 - x(0+i)*x(18*n+i) + x(5*n+i)^2*pm4 - x(0+i)*x(3*n+i)*pm1 - x(0+i)*x(8*n+i)*pm5 - 2*x(0+i)^2*p7 + x(n+i)*x(2*n+i)*x(7*n+i)^2*p1 - x(0+i)*x(2*n+i)*x(7*n+i)*p2 - x(0+i)*x(n+i)*x(7*n+i)*p4 + x(5*n+i)*x(6*n+i)*x(7*n+i)*p5 + 2*x(n+i)*x(3*n+i)*x(7*n+i)*pm7;
f2(i)=-p1*x(1*n+i)*x(2*n+i)*x(7*n+i)^2+pm1*x(0*n+i)*x(3*n+i)-p4*x(0*n+i)*x(1*n+i)*x(7*n+i)+pm4*x(5*n+i)^2+p6*x(5*n+i)*x(8*n+i)-pm6*x(1*n+i)*x(6*n+i)*x(7*n+i)^2+p7*x(0*n+i)^2-pm7*x(1*n+i)*x(3*n+i)*x(7*n+i)-x(18*n+i)*(x(1*n+i)-x(19*n+i));
f3(i)=-pm1*x(1*n+i)*x(2*n+i)*x(7*n+i)^2+pm1*x(0*n+i)*x(3*n+i)-p2*x(0*n+i)*x(2*n+i)*x(7*n+i)+pm2*x(3*n+i)^2-p3*x(2*n+i)*x(3*n+i)*x(7*n+i)+pm3*x(4*n+i)-x(18*n+i)*(x(2*n+i)-x(20*n+i));
f4(i)=p1*x(1*n+i)*x(2*n+i)*x(7*n+i)-pm1*x(0*n+i)*x(3*n+i)+2*p2*x(0*n+i)*x(2*n+i)*x(7*n+i)-2*pm2*x(3*n+i)^2-p3*x(2*n+i)*x(3*n+i)*x(7*n+i)+pm3*x(4*n+i)+p7*x(0*n+i)^2-pm7*x(1*n+i)*x(3*n+i)*x(7*n+i)-x(18*n+i)*x(3*n+i);
f5(i)=p3*x(2*n+i)*x(3*n+i)*x(7*n+i)-pm3*x(4*n+i)-x(18*n+i)*x(4*n+i);
f6(i)=2*p4*x(0*n+i)*x(1*n+i)*x(7*n+i)-2*pm4*x(5*n+i)^2-p5*x(5*n+i)*x(6*n+i)*x(7*n+i)+pm5*x(0*n+i)*x(8*n+i)-p6*x(5*n+i)*x(8*n+i)+pm6*x(1*n+i)*x(6*n+i)*x(7*n+i)^2-x(18*n+i)*x(5*n+i);
f7(i)=p5*x(5*n+i)*x(6*n+i)*x(7*n+i)+pm5*x(0*n+i)*x(8*n+i)+p6*x(5*n+i)*x(8*n+i)-pm6*x(1*n+i)*x(6*n+i)*x(7*n+i)^2-x(18*n+i)*(x(6*n+i)-x(21*n+i));
f8(i)=-2*p1*x(1*n+i)*x(2*n+i)*x(7*n+i)^2+2*pm1*x(0*n+i)*x(3*n+i)-p2*x(0*n+i)*x(2*n+i)*x(7*n+i)+pm2*x(3*n+i)^2-p3*x(2*n+i)*x(3*n+i)*x(7*n+i)+pm3*x(4*n+i)-p4*x(0*n+i)*x(1*n+i)*x(7*n+i)+pm4*x(5*n+i)^2-p5*x(5*n+i)*x(6*n+i)*x(7*n+i)+pm5*x(0*n+i)*x(8*n+i)+2*p6*x(5*n+i)*x(8*n+i)-2*pm6*x(1*n+i)*x(6*n+i)*x(7*n+i)^2+p7*x(0*n+i)^2-pm7*x(1*n+i)*x(3*n+i)*x(7*n+i)-x(18*n+i)*(x(7*n+i)-x(22*n+i));
f9(i)=p5*x(5*n+i)*x(6*n+i)*x(7*n+i)-pm5*x(0*n+i)*x(8*n+i)-p6*x(5*n+i)*x(8*n+i)+pm6*x(1*n+i)*x(6*n+i)*x(7*n+i)^2-x(18*n+i)*x(8*n+i);
%Nun folgt die jeweilige Ableitung nach c und Multiplikation mit h.
f1c(1,i)=diff(f1(i),x(0*n+i))*x(9*n+i);
f1c(2,i)=diff(f1(i),x(1*n+i))*x(10*n+i);
f1c(3,i)=diff(f1(i),x(2*n+i))*x(11*n+i);
f1c(4,i)=diff(f1(i),x(3*n+i))*x(12*n+i);
f1c(5,i)=diff(f1(i),x(4*n+i))*x(13*n+i);
f1c(6,i)=diff(f1(i),x(5*n+i))*x(14*n+i);
f1c(7,i)=diff(f1(i),x(6*n+i))*x(15*n+i);
f1c(8,i)=diff(f1(i),x(7*n+i))*x(16*n+i);
f1c(9,i)=diff(f1(i),x(8*n+i))*x(17*n+i);
f2c(1,i)=diff(f2(i),x(0*n+i))*x(9*n+i);
f2c(2,i)=diff(f2(i),x(1*n+i))*x(10*n+i);
f2c(3,i)=diff(f2(i),x(2*n+i))*x(11*n+i);
f2c(4,i)=diff(f2(i),x(3*n+i))*x(12*n+i);
f2c(5,i)=diff(f2(i),x(4*n+i))*x(13*n+i);
f2c(6,i)=diff(f2(i),x(5*n+i))*x(14*n+i);
f2c(7,i)=diff(f2(i),x(6*n+i))*x(15*n+i);
f2c(8,i)=diff(f2(i),x(7*n+i))*x(16*n+i);
f2c(9,i)=diff(f2(i),x(8*n+i))*x(17*n+i);
f3c(1,i)=diff(f3(i),x(0*n+i))*x(9*n+i);
f3c(2,i)=diff(f3(i),x(1*n+i))*x(10*n+i);
f3c(3,i)=diff(f3(i),x(2*n+i))*x(11*n+i);
f3c(4,i)=diff(f3(i),x(3*n+i))*x(12*n+i);
f3c(5,i)=diff(f3(i),x(4*n+i))*x(13*n+i);
f3c(6,i)=diff(f3(i),x(5*n+i))*x(14*n+i);
f3c(7,i)=diff(f3(i),x(6*n+i))*x(15*n+i);
f3c(8,i)=diff(f3(i),x(7*n+i))*x(16*n+i);
f3c(9,i)=diff(f3(i),x(8*n+i))*x(17*n+i);
f4c(1,i)=diff(f4(i),x(0*n+i))*x(9*n+i);
f4c(2,i)=diff(f4(i),x(1*n+i))*x(10*n+i);
f4c(3,i)=diff(f4(i),x(2*n+i))*x(11*n+i);
f4c(4,i)=diff(f4(i),x(3*n+i))*x(12*n+i);
f4c(5,i)=diff(f4(i),x(4*n+i))*x(13*n+i);
f4c(6,i)=diff(f4(i),x(5*n+i))*x(14*n+i);
f4c(7,i)=diff(f4(i),x(6*n+i))*x(15*n+i);
f4c(8,i)=diff(f4(i),x(7*n+i))*x(16*n+i);
f4c(9,i)=diff(f4(i),x(8*n+i))*x(17*n+i);
f5c(1,i)=diff(f5(i),x(0*n+i))*x(9*n+i);
f5c(2,i)=diff(f5(i),x(1*n+i))*x(10*n+i);
f5c(3,i)=diff(f5(i),x(2*n+i))*x(11*n+i);
f5c(4,i)=diff(f5(i),x(3*n+i))*x(12*n+i);
f5c(5,i)=diff(f5(i),x(4*n+i))*x(13*n+i);
f5c(6,i)=diff(f5(i),x(5*n+i))*x(14*n+i);
f5c(7,i)=diff(f5(i),x(6*n+i))*x(15*n+i);
f5c(8,i)=diff(f5(i),x(7*n+i))*x(16*n+i);
f5c(9,i)=diff(f5(i),x(8*n+i))*x(17*n+i);
f6c(1,i)=diff(f6(i),x(0*n+i))*x(9*n+i);
f6c(2,i)=diff(f6(i),x(1*n+i))*x(10*n+i);
f6c(3,i)=diff(f6(i),x(2*n+i))*x(11*n+i);
f6c(4,i)=diff(f6(i),x(3*n+i))*x(12*n+i);
f6c(5,i)=diff(f6(i),x(4*n+i))*x(13*n+i);
f6c(6,i)=diff(f6(i),x(5*n+i))*x(14*n+i);
f6c(7,i)=diff(f6(i),x(6*n+i))*x(15*n+i);
f6c(8,i)=diff(f6(i),x(7*n+i))*x(16*n+i);
f6c(9,i)=diff(f6(i),x(8*n+i))*x(17*n+i);
f7c(1,i)=diff(f7(i),x(0*n+i))*x(9*n+i);
f7c(2,i)=diff(f7(i),x(1*n+i))*x(10*n+i);
f7c(3,i)=diff(f7(i),x(2*n+i))*x(11*n+i);
f7c(4,i)=diff(f7(i),x(3*n+i))*x(12*n+i);
f7c(5,i)=diff(f7(i),x(4*n+i))*x(13*n+i);
f7c(6,i)=diff(f7(i),x(5*n+i))*x(14*n+i);
f7c(7,i)=diff(f7(i),x(6*n+i))*x(15*n+i);
f7c(8,i)=diff(f7(i),x(7*n+i))*x(16*n+i);
f7c(9,i)=diff(f7(i),x(8*n+i))*x(17*n+i);
f8c(1,i)=diff(f8(i),x(0*n+i))*x(9*n+i);
f8c(2,i)=diff(f8(i),x(1*n+i))*x(10*n+i);
f8c(3,i)=diff(f8(i),x(2*n+i))*x(11*n+i);
f8c(4,i)=diff(f8(i),x(3*n+i))*x(12*n+i);
f8c(5,i)=diff(f8(i),x(4*n+i))*x(13*n+i);
f8c(6,i)=diff(f8(i),x(5*n+i))*x(14*n+i);
f8c(7,i)=diff(f8(i),x(6*n+i))*x(15*n+i);
f8c(8,i)=diff(f8(i),x(7*n+i))*x(16*n+i);
f8c(9,i)=diff(f8(i),x(8*n+i))*x(17*n+i);
f9c(1,i)=diff(f9(i),x(0*n+i))*x(9*n+i);
f9c(2,i)=diff(f9(i),x(1*n+i))*x(10*n+i);
f9c(3,i)=diff(f9(i),x(2*n+i))*x(11*n+i);
f9c(4,i)=diff(f9(i),x(3*n+i))*x(12*n+i);
f9c(5,i)=diff(f9(i),x(4*n+i))*x(13*n+i);
f9c(6,i)=diff(f9(i),x(5*n+i))*x(14*n+i);
f9c(7,i)=diff(f9(i),x(6*n+i))*x(15*n+i);
f9c(8,i)=diff(f9(i),x(7*n+i))*x(16*n+i);
f9c(9,i)=diff(f9(i),x(8*n+i))*x(17*n+i);
%Schließlich die Berechnung der 9*n + 1*n Instabilitätsbedingungen.
f1ch(i)=f1c(1,i)+f1c(2,i)+f1c(3,i)+f1c(4,i)+f1c(5,i)+f1c(6,i)+f1c(7,i)+f1c(8,i)+f1c(9,i);
f2ch(i)=f2c(1,i)+f2c(2,i)+f2c(3,i)+f2c(4,i)+f2c(5,i)+f2c(6,i)+f2c(7,i)+f2c(8,i)+f2c(9,i);
f3ch(i)=f3c(1,i)+f3c(2,i)+f3c(3,i)+f3c(4,i)+f3c(5,i)+f3c(6,i)+f3c(7,i)+f3c(8,i)+f3c(9,i);
f4ch(i)=f4c(1,i)+f4c(2,i)+f4c(3,i)+f4c(4,i)+f4c(5,i)+f4c(6,i)+f4c(7,i)+f4c(8,i)+f4c(9,i);
f5ch(i)=f5c(1,i)+f5c(2,i)+f5c(3,i)+f5c(4,i)+f5c(5,i)+f5c(6,i)+f5c(7,i)+f5c(8,i)+f5c(9,i);
f6ch(i)=f6c(1,i)+f6c(2,i)+f6c(3,i)+f6c(4,i)+f6c(5,i)+f6c(6,i)+f6c(7,i)+f6c(8,i)+f6c(9,i);
f7ch(i)=f7c(1,i)+f7c(2,i)+f7c(3,i)+f7c(4,i)+f7c(5,i)+f7c(6,i)+f7c(7,i)+f7c(8,i)+f7c(9,i);
f8ch(i)=f8c(1,i)+f8c(2,i)+f8c(3,i)+f8c(4,i)+f8c(5,i)+f8c(6,i)+f8c(7,i)+f8c(8,i)+f8c(9,i);
f9ch(i)=f9c(1,i)+f9c(2,i)+f9c(3,i)+f9c(4,i)+f9c(5,i)+f9c(6,i)+f9c(7,i)+f9c(8,i)+f9c(9,i);
%DIE 10.TE NEBENBEDINGUNG H'H-1 FEHLT NOCH.
end

%3.4 Berechnung der Matrix J2.
for i=1:n
for j=1:n
for k=1:23 %Berechnung der Ableitungen.
J2((j-1)*18+1,(i-1)*23+k)=diff(f1(j),x((k-1)*n+i));
J2((j-1)*18+2,(i-1)*23+k)=diff(f2(j),x((k-1)*n+i));
J2((j-1)*18+3,(i-1)*23+k)=diff(f3(j),x((k-1)*n+i));
J2((j-1)*18+4,(i-1)*23+k)=diff(f4(j),x((k-1)*n+i));
J2((j-1)*18+5,(i-1)*23+k)=diff(f5(j),x((k-1)*n+i));
J2((j-1)*18+6,(i-1)*23+k)=diff(f6(j),x((k-1)*n+i));
J2((j-1)*18+7,(i-1)*23+k)=diff(f7(j),x((k-1)*n+i));
J2((j-1)*18+8,(i-1)*23+k)=diff(f8(j),x((k-1)*n+i));
J2((j-1)*18+9,(i-1)*23+k)=diff(f9(j),x((k-1)*n+i));
J2((j-1)*18+10,(i-1)*23+k)=diff(f1ch(j),x((k-1)*n+i));
J2((j-1)*18+11,(i-1)*23+k)=diff(f2ch(j),x((k-1)*n+i));
J2((j-1)*18+12,(i-1)*23+k)=diff(f3ch(j),x((k-1)*n+i));
J2((j-1)*18+13,(i-1)*23+k)=diff(f4ch(j),x((k-1)*n+i));
J2((j-1)*18+14,(i-1)*23+k)=diff(f5ch(j),x((k-1)*n+i));
J2((j-1)*18+15,(i-1)*23+k)=diff(f6ch(j),x((k-1)*n+i));
J2((j-1)*18+16,(i-1)*23+k)=diff(f7ch(j),x((k-1)*n+i));
J2((j-1)*18+17,(i-1)*23+k)=diff(f8ch(j),x((k-1)*n+i));
J2((j-1)*18+18,(i-1)*23+k)=diff(f9ch(j),x((k-1)*n+i));
end
end
end



%4. Erzeugung der Kovarianzmatrix C nach Kapitel 4.1 -
% Numerische Analyse der Kovarianzmatrix.
%4.1 Grundlegendes
o=m; %o steht für die Dimension n der Optimierungsvariablen.
r=18*n; %r steht für die Dimension n2 der Funktion Nebenbedingungen.
q=5*n; %q steht für die Dimension n1 der Zielfunktion.
s=5*n; %s steht für n-n2. R UND Q MIT 19.NB NOCH ÄNDERN.

%4.2 Berechnung der Nullmatrizen
for i=1:r
for j=1:r
Null1(i,j)=0; %Nullmatrix mit Dimension n2 x n2.
end
end
for i=1:r
for j=1:q
Null2(i,j)=0; %Nullmatrix mit Dimension n2 x n1.
end
end
for i=1:q
for j=1:r
Null3(i,j)=0; %Nullmatrix mit Dimension n1 x n2.
end
end

%4.3 Übergabe der Inputwerte
x=z %Die Inputwerte können erst nach der Berechnungen der Ableitungen
%übergeben werden
%PROBLEM: XI IST EINE VARIABLE. BRAUCHEN ZUR QR-ZERLEGUNG NUMERISCHE
%WERTE. MÜ?EN ALSO DIE WERTE VON X NOCH ÜBERGEBEN.
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);
x5=x(5);
x6=x(6);
x7=x(7);
x8=x(Cool;
x9=x(9);
x10=x(10);
x11=x(11);
x12=x(12);
x13=x(13);
x14=x(14);
x15=x(15);
x16=x(16);
x17=x(17);
x18=x(1Cool;
x19=x(19);
x20=x(20);
x21=x(21);
x22=x(22);
x23=x(23);
%x24=x(24);
%x25=x(25);
%x26=x(26);
%x27=x(27);
%x28=x(2Cool;
%x29=x(29);
%x30=x(30);
%x31=x(31);
%x32=x(32);
%x33=x(33);
%x34=x(34);
%x35=x(35);
%x36=x(36);
%x37=x(37);
%x38=x(3Cool;
%x39=x(39);
%x40=x(40);
%x41=x(41);
%x42=x(42);
%x43=x(43);
%x44=x(44);
%x45=x(45);
%x46=x(46);
%x47=x(47);
%x48=x(4Cool;
%x49=x(49);
%x50=x(50);
%x51=x(51);
%x52=x(52);
%x53=x(53);
%x54=x(54);
%x55=x(55);
%x56=x(56);
%x57=x(57);
%x58=x(5Cool;
%x59=x(59);
%x60=x(60);
%x61=x(61);
%x62=x(62);
%x63=x(63);
%x64=x(64);
%x65=x(65);
%x66=x(66);
%x67=x(67);
%x68=x(6Cool;
%x69=x(69);
%Wir substituieren nun die Werte.
J1=subs(J1);
J2=subs(J2);
J2T=J2';

%4.4 Die QR-Zerlegung
%Da nun eine numerische Matrix vorliegt, kann nun die QR-Zerlegung
%vorgenommen werden:
[Q,R]=qr(J2T);
%Mit
L=R';
%erhalten wir die untere Dreiecksmatrix L1=L' über L=[L1,LNull]:
for i=1:r
for j=1:r
L1(i,j)=L(i,j);
end
end
for i=1:r
for j=1Sado-r)
LNull(i,j)=0;
end
end
%Nun folgt die Zerlegung von Q in Q1 und Q2.
for i=1Surprised
for j=1:r
Q1(i,j)=Q(i,j);
end
end
for i=1Surprised
for j=1:q
Q2(i,j)=Q(i,r+j);
end
end

%4.5 Die Eigenwertzerlegung
%Wir definieren
J1quer=J1*Q2;
%und zerlegen J1quer:
[U,S,V]=svd(J1quer);
VT=V';
QT=Q';

%4.6 Die Berechnung der Kovarianzmatrix
C=subs(Q*[Null1,Null2;Null3,((V*inv(S'*S))*VT)])*QT;

%4.7 Die Zielfunktion des Versuchsplanungsproblems
y=C(1,1)+C(2,2)+C(3,3)+C(4,4)+C(5,5)+C(6,6)+C(7,7)+C(8,Cool+C(9,9)+C(10,10)+C(11,11)+C(12,12)+C(13,13)+C(14,14)+C(15,15)+C(16,16)+C(17,17)+C(18,1Cool+C(19,19)+C(20,20)+C(21,21)+C(22,22)+C(23,23)

%ALTERNATIV NOCH EINE AUTOMATISCHE BERECHNUNG ÜBER:
%spur=0;
%for i=1:n*23
% spur=spur+C(i,i);
%end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Benni84
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 12.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2011, 23:19     Titel:
  Antworten mit Zitat      
Huch, hab'meine Function-File zweimal angegeben, sorry....
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: 15.03.2011, 11:20     Titel:
  Antworten mit Zitat      
Hallo Benni,

Wow. Deine Funktion sieht schrecklich aus. Einerseits hast Du sie als Text gepostet, obwohl es hier die hilfreiche und besser lesbare [c o d e] Formattierung gibt. Auf der anderen Seite sind solche Ausdrücke immer gruselig:
[code]for i=1:o
for j=1:r
Q1(i,j)=Q(i,j);
end
end [code]
In Matlab wäre dies massiv viel schneller und hübscher zulesen:
[code]Q1(1:o, 1:r) = Q(1:o, 1:r)[/code]
Oder noch besser (falls möglich):
[code]Q1= Q(1:o, 1:r)[/code]
Zudem ist in Deinem Code Q1 nicht pre-allociert. Dann muss Q1 in jeder Iteration anwachsen, so dass Matlab im Endeffekt i*j mal immer neue Matrizen allocieren muss, was sehr zeitraubend ist.

Über das Erstellen von Variablen "f1, f2, f3..." habe ich in diesem Forum schon viele dutzendfach geschrieben. Das macht immer ernste Probleme und in Deinem Fall bläht es die Funktion wahnsinning auf. Wenn man stattdessen Indices verwenden würde, wäre die Funktion sicherlich 90% kürzer und man hätte irgendeine Chance einen Tippfehler beim Debuggen zu finden.

Zur Zeit ist die Funktion so kompliziert, dass ich ausser Stande bin zu helfen. Vielleicht kann ja jemand anderes aus dem Forum das schaffen. Im Ernst: Eine so krasses Code-Beispiel habe ich noch nie gesehen. Wie hast Du das denn erstellt?

Viel Erfolg, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Benni84
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 12.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2011, 14:07     Titel:
  Antworten mit Zitat      
Hey Jan,

danke für die vielen nützlichen Tipps. Das man das schöner programmieren kann, hab'ich mir gedacht, wusste nur nicht wie, von daher bin ich für solche Ratschläge immer sehr dankbar.
Ich bin Matlab-Neuling und wollte erstmal das Programm zum laufen bringen und mich dann um eine Verbesserung der Laufzeit etc. kümmern.

Die Einführung von Indices statt der Auflistung f1, f2,.... werd'ich als erstes angehen.

Hast Du einen Tipp für mich wo ich solche "kosmetischen" Verbesserungen wie z.B.
Code:
Q1(1Surprised, 1:r) = Q(1Surprised, 1:r)

nachlesen kann?
Gibt es da was besseres als die Matlab-Hilfe?

Ich versteh'Deine Frage nicht, bei der Erstellung wusste ich wie die Funktion aussieht und hab'sie dementsprechend nach und nach aufgebaut.
Es ist die Spur einer Kovarianzmatrix, die von den Jacobimatrizen der Zielfunktion und der Nebenbedingunen eines Optimierungsproblems abhängt.

Die Funktion selbst wiederum nutze ich als Zielfunktion meines Optimierungsproblems.
Wenn ich mein Optimierungsproblem mit dem Befehl "fmincon" und meinen entsprechenden Nebenbedingunen durchlaufen lasse, erhalte ich auch vernünftige Ergebnisse, es dauert allerdings paar Stunden.

Daher dachte ich, dass man f1, f2,....,usw. schon vorher berechnen könnte und in der Funktion nur noch darauf verweist, um sich die Berechnung zu sparen, wenn fmincon bei jeder Iteration auf die Zielfunktion zugreift.

So greift doch fmincon bei jeder Iteration auf die Zielfunktion zu und berechnet alles neu, oder?

Vielen Dank und beste Grüße,
Benni
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.