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

Optimierung/Minimierung von Fehlerquadraten

 

Marcus Aurelius

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2013, 15:10     Titel: Optimierung/Minimierung von Fehlerquadraten
  Antworten mit Zitat      
Hallo liebe Community,

ich habe folgendes Problem:

Durch die Faltung eines Eingangssignals mit einer Übertragungsfunktion (im Frequenzbereich) bekomme ich ein theoretisches Ausgangssignal. Das möchte ich nun mit dem experimentellen über die Fehlerquadrate vergleichen. Die beiden Variablen "Pe" und "t_mean" der Übertragungsfunktion sind dabei so zu optimieren, dass die Fehlerquadrate minimal werden.
In der Theorie ist mir das alles soweit klar geworden, aber ich bekomme es einfach nicht in Matlab umgesetzt. Hier mein Code:


Code:
clear all; close all;


% Paramtereingabe
A1 = 0.95349;
xc1 = 1.03415;
t01 = 0.02123;
w1 = 0.00219;
y01 = 0;
A2 = 1.01398;
xc2 = 1.20942;
t02 = 0.06229;
w2 = 0.04177;
y02 = 0;


% Festlegung Zeitintervall [in Minuten]
t_min = 0.00001;
t_max = 3;
schritte = 10000;
dt = t_max/schritte;
t = t_min:dt:t_max;


% Zuweisung der Funktionen EIngang = x, Übertragung = m, Ausgang = y
x = E(A1,t01,xc1,w1,y01,t);
m = Uebertr(Pe,t_mean,t);
y_exp = E(A2,t02,xc2,w2,y02,t);


% Faltung mit Fouriertransformation und Berechnung Systemantwort (Frequenzbereich)
F_y_pred_freq = fft(x,10000).*fft(m,10000);
y_pred_freq = ifft(F_y_pred_freq,10000)*dt;


%Ausführung der Optimierung

 LB = [0.1; 0.001];   % Lower bound
 UB = [30; 1];  % Upper bound
 SW = [10; 0.1];
fmincon(@objecfun,SW,[],[],[],[],LB,UB)

% [x,fval]=lsqnonlin(@objecfun,SW,LB,UB)



Die Fehlerquadrate stehen in der FUnktion objecfun:

Code:
function Fehlerquadrat = objecfun(Pe,t_mean)


%Summe Fehlerquadrate
Fehlerquadrat = zeros(length(t_mean), length(Pe));
for i=1:length(Pe)  
    for j=1:length(t_mean)    
        Fehlerquadrat(j,i) = sum((y_exp-y_pred_freq).^2);      
    end
end


end


Meine Fehlermeldungen lauten:

Code:
Error using objecfun (line 5)
Not enough input arguments.

Error in fmincon (line 635)
      initVals.f = feval(funfcn{3},X,varargin{:});

Error in Main_1_2 (line 46)
  fmincon(@objecfun,SW,[],[],[],[],LB,UB)

Caused by:
    Failure in initial user-supplied objective function
    evaluation. FMINCON cannot continue.


Hier könnte das Problem sein, dass meine Übertragungsfunktion "m" ja bereits die optimierungsvariablen "Pe" und "t_mean" beinhalten, die aber vom Optimierer ja garnicht angefasst werden (da sie nicht in der Optimierungsfunktion stehen).
Mir fällt aber leider keinerlei Workaround ein...

Die Fehlerquadrate für eine fixe Vorgabe von Pe und t_mean zu berechnen funktioniert übrigens!

Vielen Dank schonmal


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 31.05.2013, 15:48     Titel:
  Antworten mit Zitat      
steck da grade nicht so drin aber versuch mal
Code:
x = E(A1,t01,xc1,w1,y01,t);
y_exp = E(A2,t02,xc2,w2,y02,t);
% Faltung mit Fouriertransformation und Berechnung Systemantwort (Frequenzbereich)
y_pred_freq =@(para) ifft(fft(x,10000).*fft(Uebertr(para(1),para(2),t),10000),10000)*dt-y_exp;

%Ausführung der Optimierung

 LB = [0.1; 0.001];   % Lower bound
 UB = [30; 1];  % Upper bound
 SW = [10; 0.1];


[x,fval]=lsqnonlin(y_pred_freq,SW,LB,UB);
Private Nachricht senden Benutzer-Profile anzeigen
 
Marcus Aurelius

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 17:54     Titel:
  Antworten mit Zitat      
Hallo und danke für die Antwort,

mit deinem Code macht er zumindest schonmal etwas.

Das Ergebnis ist
Code:

Local minimum possible.

lsqnonlin stopped because the final change in the sum of squares relative to
its initial value is less than the default value of the function tolerance.

<stopping criteria details>


Allerdings bekomme ich kein "Output", also meine optimierten Paramter werden mir quasi nicht mitgeteilt. Wie komme ich an die dran?

Danke schonmal Smile
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 03.06.2013, 18:01     Titel:
  Antworten mit Zitat      
die sind in x. sollte also nicht allzu schwer sein daran zu kommen
Private Nachricht senden Benutzer-Profile anzeigen
 
Marcus Aurelius

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2013, 10:36     Titel:
  Antworten mit Zitat      
super, vielen Dank!

Es scheint so ganz gut zu funktionieren. Darf ich fragen, wieso du -y_exp hinter die Gleichung geschrieben hast?

Gruß
 
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.