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

Fmincon minimum einer Kreuzkorrelation

 

Hanspeter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.05.2012, 12:14     Titel: Fmincon minimum einer Kreuzkorrelation
  Antworten mit Zitat      
Hallo,
ich möchte mit fmincon das minimum einer Funktion bestimmen, nur weiß ich noch nicht genau wie ich das genau mit einer Matrix mache.
Meine funktion lautet:
Code:
for j= 1:430
    u(j) = u1(j) - (x1(j)*p1(j)+x2(j)*p2(j));
end

funktion =sum(xcov(u,p3,'biased')/(var(u)*var(p3))^0.5) ;


also ich führe eine Kreuzkorrelation durch und möchte das die Summe minimal wird. x1 und x2 sind meine Variablen mit jeweils 430 elementen.

Mein Problem ist nun das ich durch die Kreuzkorrelation nicht einfach für j=1 dann j=2 usw das minimum bestimmen kann sondern alles zusammenhängend aufeinmal bestimmen muss durch den mittelwert.

außerdem sollten alle x positiv sein gibt es eine möglichkeit das ganze mit fmincon umzusetzen?


MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 02.05.2012, 16:47     Titel:
  Antworten mit Zitat      
Hallo,

kannst du mal was zum Hintergrund sagen. Handelt es sich dabei um die Kreuzkorrelation zweier diskreter Zeitsignale? Kann man das überhaupt minimieren? (die Frage klingt vielleicht dumm, ist aber ernst gemeint...)

Grüße, MaFam
Private Nachricht senden Benutzer-Profile anzeigen
 
Hanspeter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.05.2012, 07:25     Titel:
  Antworten mit Zitat      
Hallo MaFam,

bei der Kreuzkorrelation handelt es sich einmal um die Ableitung einer Spannung dU/dt und einmal um die Ableitung einer Leistung dP/dt.
Normalerweise sollte eine minimierung ja möglich sein da wenn ich die x Werte Variere die Summe der Kreuzkorrelation sich auch verändert.
Achja x1 und x2 stellen sozusagen Widerstände da und j=1:430 sind die Messpunkte, also ich Messe 430 mal.
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 03.05.2012, 15:07     Titel:
  Antworten mit Zitat      
Dann baue doch eine Funktion myfun(x1,x2), wenn das deine Variablen sind. Ich sehe hier übrigens nun auch Optimierungspotential.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hanspeter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2012, 07:17     Titel:
  Antworten mit Zitat      
Hallo MaFam,

das Problem das ich habe ist das es nicht nur die Variabeln x1 und x2 gibt. In x1 und x2 stehen jeweils 430 Werte also habe ich sozusagen 860 Variabeln. Ich habe es nun mal so versucht das ich myFun mit 860 Variabeln habe aber irgenwie dauert das viel zu lange und ich kriege kein Ergebniss. Aber ich glaube es geht gar nicht anders oder was hast du für eine Optimierungs möglichkeit?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.05.2012, 08:47     Titel:
  Antworten mit Zitat      
Hallo,

und welche Nebenbedingungen gibt es? Minimierung in 860 Dimensionen ohne irgendwelche Nebenbedingungen erscheint mir nicht unbedingt sinnvoll.

Poste doch mal deine bisherigen Versuche.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hanspeter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2012, 11:54     Titel:
  Antworten mit Zitat      
Hallo,
meine Nebenbedingung ist das die Variabeln in myFun nicht negativ sein dürfen(das kriege ich hin mit lower Bound und uper bound). Und das die einzelnen Werte der Kreuzkorrelation nicht > 1 sein dürfen.

hier mal mein bischeriger stand:
Code:
clc,clear all, close all
global i;
global C2;
global C3;
global p11;
global p12;
global p13;
global u1;

p11=[HIER STEHEN 430 MESSWERTE];
p12=[HIER STEHEN 430 MESSWERTE];
p13=[HIER STEHEN 430 MESSWERTE];
u1  =[HIER STEHEN 430 MESSWERTE];



C2=zeros(430,1);
C3=zeros(430,1);

lb=zeros(860,1);
x0=zeros(860,1);
ub=ones(860,1);

[x,fval] = fmincon(@myfun,x0,[],[],[],[],lb,ub)

% Rechnung für Plot
for j= 1:430
    ui1(j) = u1(j) - (C2(j)*p12(j)+C3(j)*p13(j));          
end
corrd1 = xcov(ui1,p11,'biased')/(var(ui1)*var(p11))^0.5 ;
figure(1)
s=size(corrd1);
plot(1:s(2),corrd1);


Hier die Funktion:
Code:
function f = myfun(x)
global i;
global C2;
global C3;
global p11;
global p12;
global p13;
global u1;
i=0;
for j=1:430
    i=i+1;
    C2(i)=x(i);
    i=i+1;
    C3(i)=x(i);
end

for j= 1:430
    ui1(j) = u1(j) - (C2(j)*p12(j)+C3(j)*p13(j));
end

corrd1 =( xcov(ui1,p11,'biased')/(var(ui1)*var(p11))^0.5) ;
fmin=sum(abs(corrd1));
f=-fmin;                        % ich möchte das maximum
end
 


Hab die Simulation mal 1 tag laufen lassen und er läuft immer noch.
 
Hanspeter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2012, 11:58     Titel:
  Antworten mit Zitat      
Habe leider noch einen kleinen Fehler hier eingebaut in myFun:
Code:

for j=1:430
    i=i+1;
    C2(i)=x(i);                     % HIER DER FEHLER RICHTIG SO C2(j)=x(i);
    i=i+1;
    C3(i)=x(i);                      % HIER DER FEHLER RICHTIG SO C3(j)=x(i);
end
 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.05.2012, 19:01     Titel:
  Antworten mit Zitat      
Hallo,

die Funktion muss extrem oft aufgerufen werden, alleine zur Gradientenbestimmung 860 oder wahrscheinlich eher 1720 in jeder einzelnen Iteration.

Daher ist es wichtig, den Code so effizient wie möglich zu gestalten:
- wenige oder gar keine globale Variablen.
- wenige oder gar keine for-Schleifen.

Falls das nicht hilft, würde ich es mal mit fminsearch und künstlichen Beschränkungen versuchen (hohe Werte wenn Nebenbedingung verletzt).

Wirklich ausprobieren kann man das wohl leider nur mit den Daten.

Grüße,
Harald
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.