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

genetic algorithm optimierung eines 2 Massenschwingers

 

hillo123
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 04.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.12.2015, 12:49     Titel: genetic algorithm optimierung eines 2 Massenschwingers
  Antworten mit Zitat      
Hallo liebe Gemeinde,


ich habe hier einen Matlab Code mit dem ich die Simulation an das Experiment anpassen möchte, dazu habe ich die Zustandsraumdarstellung mit einer zufälligen Ströung überlagert um so die Experimentellen Daten zu simulieren (sys_e).
Dann habe ich für die Dämfungen und Steifigkeiten einen beliebigen Parameter eingefügt und das Zustandsraummodell generiert.

Wenn ich auf ausführen klicke kommt jedoch folgende Fehlermeldung

Function definitions are not permitted in this context.

was habe ich denn falsch gemacht??


Code:

f = 0:0.1:50; %Frequenzvektor

 %% Systemgleichungen 2-Massenschwinger
 m1 = 1;
 m2 = 8;
 b1 = 4.68;
 b2 = 3.34;
 k1 = 1.34e4;
 k2 = 4.78e4;
 dof=2; %Anzahl der Freiheitsgrade
 Mm = [m1,0;0,m2]; %Massenmatrix
 Bm = [b1,-b1;-b1,b1+b2]; %Daempfungsmatrix
 Km = [k1,-k1;-k1,k1+k2]; %Steifigkeitsmatrix
 Am = [zeros(dof), eye(dof); -Mm\Km, -Mm\Bm]; %Systemmatrix
 Bm = [zeros(dof); inv(Mm)]; %Eingangsmatrix
 Cm = [eye(dof),zeros(dof)]; %Ausgangsmatrix
 Dm = zeros(dof); %Durchgangsmatrix
 
 sys_e  = ss(Am,Bm,Cm,Dm);


 %%%%%%%%%%%%%% Simulation von Messdaten durch Rauschueberlagerung
 sys_e = sys_e+[random('normal',1e-5,2e-6,1,1,501),random('normal',1e-5,2e-6,1,1,501);
 random('normal',1e-5,2e-6,1,1,501),random('normal',1e-5,2e-6,1,1,501)];
 
 

 
 
 
 %% Identifikation
 % Frequenzgewichtung
  WeightFrequency=4
 
 
 % Optionen
 optimoptions.NumberOfVars = 4; %Anzahl Parameter
 optimoptions.LowerBound = [3e3, 10e3, 0, 0]; %Untergrenze Parameter
 optimoptions.UpperBound = [3e5, 10e5, 10, 10]; %Obergrenzen Parameter
 optimoptions.InitialPopulation = [6e4, 10e4, 1, 1]; %Startwerte
 optimoptions.Generations = 50; %Anzahl Generationen
 optimoptions.PopulationSize = 75; %Populationsgroesse
 optimoptions.TolFun = 1e-9; %Abbruchtoleranz
 optimoptions.WeightFrequency = WeightFrequency;
 optimoptions.MaxFrequency = 50; %Max.Ident.frequenz
 optimoptions.WeightExitation = [1 1]; %Alle Eingaenge
 optimoptions.WeightResponse = [1 1]; %Alle Ausgaenge
 %Identifikationsaufruf
 [opt, fitness] = globalgreyest(sys_e , @redssopt , optimoptions);
 
 
% Funktion zur Parametrisierung der Systemgleichungen:

function sys = redssopt(par)
  %Akzeptiert als Eingabe einen Parametervektor und gibt das
  %Zustandsraummodell unter Verwendung des Parametervektors aus.
  m1 = 1; %m = konstant
  m2 = 8;
  dof = 2; %Freiheitsgrade
  M1 = [m1,0;0,m2]; %Massenmatrix
  B1 = [par(3), -par(3); -par(3), par(3)+par(4)]; %Daempfungsmatrix
  K1 = [par(1), -par(1); -par(1), par(1)+par(2)]; %Steifigkeitsmatrix
  A1 = [zeros(dof), eye(dof); -M1\K1, -M1\B1]; %Systemmatrix
  B1 = [zeros(dof);inv(M1)]; %Eingangsmatrix
  C1 = [eye(dof),zeros(dof)]; %Ausgangsmatrix
  D1 = zeros(dof); %Durchgangsmatrix
  %Zustandsraumdarstellung mit identifizierten Parametern

  sys = ss(A1,B1,C1,D1);
  end
 


Grüße

hillo
Private Nachricht senden Benutzer-Profile anzeigen


Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 23.12.2015, 16:28     Titel:
  Antworten mit Zitat      
Hallo Hilo,

was genau macht die Funktion globalgreyest? Ist das deine Zielfunktion? Wie ist sie definiert, welche Größe möchtest du gerne minimieren/maximieren?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.12.2015, 18:48     Titel:
  Antworten mit Zitat      
Hallo,

die Fehlermeldung bedeutet, dass die Funktion in einer eigenen Datei und am besten unter dem Funktionsnamen abgespeichert werden muss.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
hillo
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 23.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.12.2015, 21:01     Titel:
  Antworten mit Zitat      
Guten Abend liebe Gemeine,

sorry für die späte Antwort.

die Funktion globalgreyest ruft den in Matlab genetischen Algorithmus aus der Toolbox auf und hat als Eingangsgrößen

sys_e:

gemessene Übertragungsfunktionsmatrix mit n Ausgängen, m Eingängen und k Frequenzstützstellen der Dimension (n × m × k) (Referenzdaten-
setz).

@redssopt:

functionhandle auf eine externe function, die gemäß der Gleichung der Zustandsraumdarstellung einen Pa-
rametervektor akzeptiert und ein Zustandsraummodell dieses Parameter-
vektors erstellt.

das heißt, dass die Parameter aus der Matrix B1 und K1 variabel gehalten sind also mit Par(1), Par(2) ... versehen werden und Par ist der Parametervektor der berechnet werden soll

optimoptions:

Optionenarray, das verschiedenste Einstellungen und Rahmenbedinun-
gen des Problems enthält.

Wird das Array hierzu automatisch erstellt, wenn ich zum Beispiel optimoptions.NumberOfVars = 4 sagen??


Ausgaben sind

opt:

optimaler Parametervektor

fitness:

Zielfunktionswert des optimalen Parametersatzes



Achso, wie speichere ich denn so eine Funktion in einer Datei ab??


viele Grüße und einen guten Rutsch Smile

hillo
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2015, 22:45     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Achso, wie speichere ich denn so eine Funktion in einer Datei ab??

Im Command Window folgendes eingeben:
Code:

In das dann auftauchende, wohl leere Editor-Fenster die Funktion kopieren, und speichern.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
hillo
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 23.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2016, 17:30     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank dieser Tipp hat mich ein großen Schritt weiter gebracht.

leider konnte ich den Algorithmus immer noch nicht ausführen.
Matlab zeigt folgende Fehlermeldungen an.


Wenn ich meinen Code ausführe, kommt folgende Fehlermeldung:

Attempt to execute SCRIPT Zweimassenschwinger as a function:
M:\Matlab Lager\Zweimassenschwinger\Zweimassenschwinger.m

Error in Zweimassenschwinger (line 47)
[opt, fitness] = Zweimassenschwinger(sysmfrd , @redssopt , optimoptions);


soll ich diesen Code als Funktion schreiben?

und wenn ich die Funktion redssopt ausführe kommt:


Error using redssopt (line 12)
Not enough input arguments.



Mein Code ist:

Code:

 f = 0:0.1:50; %Frequenzvektor

 %% Systemgleichungen 2-Massenschwinger
 m1 = 1;
 m2 = 8;
 b1 = 4.68;
 b2 = 3.34;
 k1 = 1.34e4;
 k2 = 4.78e4;
 dof=2; %Anzahl der Freiheitsgrade
 Mm = [m1,0;0,m2]; %Massenmatrix
 Bm = [b1,-b1;-b1,b1+b2]; %Daempfungsmatrix
 Km = [k1,-k1;-k1,k1+k2]; %Steifigkeitsmatrix
 Am = [zeros(dof), eye(dof); -Mm\Km, -Mm\Bm]; %Systemmatrix
 Bm = [zeros(dof); inv(Mm)]; %Eingangsmatrix
 Cm = [eye(dof),zeros(dof)]; %Ausgangsmatrix
 Dm = zeros(dof); %Durchgangsmatrix
 sysm = ss(Am,Bm,Cm,Dm)
 sysmfrd = frd(sysm ,f*2*pi);
 %Simulation von Messdaten durch Rauschueberlagerung
 sysmfrd.ResponseData = sysmfrd.ResponseData + ...
 [random('normal',1e-5,2e-6,1,1,501),random('normal',1e-5,2e-6,1,1,501);
 random('normal',1e-5,2e-6,1,1,501),random('normal',1e-5,2e-6,1,1,501)];

 %% Identifikation
 % Frequenzgewichtung
 dum = frd(ss(1),f*2*pi)*ones(2,2);
 WeightFrequency = abs(dum.ResponseData); %konstante Gewichtung
 % Optionen
 optimoptions.NumberOfVars = 4; %Anzahl Parameter
 optimoptions.LowerBound = [3e3, 10e3, 0, 0]; %Untergrenze Parameter
 optimoptions.UpperBound = [3e5, 10e5, 10, 10]; %Obergrenzen Parameter
 optimoptions.InitialPopulation = [6e4, 10e4, 1, 1]; %Startwerte
 optimoptions.Generations = 50; %Anzahl Generationen
 optimoptions.PopulationSize = 75; %Populationsgroesse
 optimoptions.TolFun = 1e-9; %Abbruchtoleranz
 optimoptions.WeightFrequency = WeightFrequency;
 optimoptions.MaxFrequency = 50; %Max.Ident.frequenz
 optimoptions.WeightExitation = [1 1]; %Alle Eingaenge
 optimoptions.WeightResponse = [1 1]; %Alle Ausgaenge
 %Identifikationsaufruf
 [opt, fitness] = Zweimassenschwinger(sysmfrd , @redssopt , optimoptions);
 %grafische Darstellung
 figure;
 bode(redssopt(opt),sysmfrd ,{1,50*2*pi});
 legend('Identifiziertes Modell','Messwerte')



Der Code für die externe Funktion

Code:
% Funktion zur Parametrisierung der Systemgleichungen:


function sys = redssopt(par)
%Akzeptiert als Eingabe einen Parametervektor und gibt das
  %Zustandsraummodell unter Verwendung des Parametervektors aus.
  m1 = 1; %m = konstant
  m2 = 8;
  dof = 2; %Freiheitsgrade
  M1 = [m1,0;0,m2]; %Massenmatrix
  B1 = [par(3), -par(3); -par(3), par(3)+par(4)]; %Daempfungsmatrix
  K1 = [par(1), -par(1); -par(1), par(1)+par(2)]; %Steifigkeitsmatrix
  A1 = [zeros(dof), eye(dof); -M1.\K1, -M1.\B1]; %Systemmatrix
  B1 = [zeros(dof);inv(M1)]; %Eingangsmatrix
  C1 = [eye(dof),zeros(dof)]; %Ausgangsmatrix
  D1 = zeros(dof); %Durchgangsmatrix
  %Zustandsraumdarstellung mit identifizierten Parametern

  sys = ss(A1,B1,C1,D1);
  end



liebe Grüße

hillo
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.