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

Hilfe bei der Anwendung von fmincon - fminsearch

 

Matmarv
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 54
Anmeldedatum: 12.03.13
Wohnort: ---
Version: Matlab R2013a
     Beitrag Verfasst am: 25.04.2013, 09:46     Titel:
  Antworten mit Zitat      
Hallo,

ja ich habe die Fragen noch einmal seperat gestellt. Ich dachte es wäre so leichter die Fragen zu beantworten ohne alles drum herum.

Ich möchte mich sehr bedanken. Ich habe jetzt brauchbare Ergebnisse.
Fminsearch findet leider nur ein lokales minimum, was im Notfall noch brauchbar wäre. fmincon hingegen liefert erstmal ein echt gutes Ergebnis. Später müssen die Ergebnisse noch geprüft werden. Aber erstmal vielen Dank.

Gruß Marvin
Private Nachricht senden Benutzer-Profile anzeigen


Spilo
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 24.10.17
Wohnort: ---
Version: R2016a/b und R2017a
     Beitrag Verfasst am: 21.12.2017, 14:14     Titel: PI-Regler Optimierung mit Vorgabe der max. Überschwingung
  Antworten mit Zitat      
Hallo,

beim durchsuchen bin ich auf diesen Thread gestoßen.
Folgendes Problem, ich möchte einen PI-Regler optimieren. Dazu verwende ich eines der Integralkriterien (ISTSE-Kriterium).Mit fmincon berechnet er mir auch die optimalen Parameter.
Soweit sogut, nun möchte einen vorgebenen maximalen Überschwingung erzielen und optimale Parameter global suchen.
Ich hoffe dass, ich hier den einen oder anderen Tipp bekomme.

Mein bisheriger Code
Code:
clear all;
global time sys
%Optimierungsfunktion
sys=tf([0 0 0.0139281558763189],[1 0.156936525430552 0.0140679071279893]);
Tsim=1000;                          %Simulationszeit
d=0.1;                                  %Zeitdifferenz
time=0:d:Tsim;                      %Zeitvektor
p=[4 2];                                %Parametervektor
lb=[0 0];                               %untere Schranke
hb=[100 100];                       %obere Schranke
%--------------------------------------------------------------------------
%Optimierungsvorgang
%Falls Konvergenzprobleme entstehen, nachfolgende Zeilen nutzen
opti=optimset('TolFun',1.e-6,'TolX',1.e-6,'MaxIter',100,'MaxFunEvals',100,'Algorithm','interior-point');
%[p,fval,exitflag,output]=fmincon(@searchpi,p,[],[],[],[],lb,hb,[],opti);
%--------------------------------------------------------------------------
Kp=p(1);
Tn=p(2);
PI=Kp*tf([Tn 1],[Tn 0]);            %PI-Regler
OL=series(PI,sys);                     %Vorwärtszweig,offener Regelkreis
CL=tf(feedback(OL,1));              %geschlossener Regelkreis
[yout]=step(CL,time);                %Sprungantwort der Regelgröße

disp('******************************************************************');
disp([' Reglerverstärkung KP : ',num2str(Kp)]);
disp([' Nachstellzeit TN in s: ',num2str(Tn)]);
disp([' Anzahl Iterationen   : ',num2str(output.iterations)])
disp([' Fehlerquadratsumme   : ',num2str(fval)])
disp('******************************************************************');

function summe=searchpi(p)
    global time sys
    Kp=p(1);
    Tn=p(2);
    PI=Kp*tf([Tn 1],[Tn 0]);            %PI-Regler
    OL=series(PI,sys);                  %offener Regelkreis
    CL=tf(feedback(OL,1));               %geschlossener Regelkreis
    [yout]=step(CL,time);               %Sprungantwort der Regelgröße
    q=1-yout;                           %Regeldifferenz
    summe=sum((time'.*q).^2);                %Gewicht=Zeit^2*Fehler^2
    h=yout(length(yout));
    m=max(yout);
end %Ende function


Als Ergebnis kommt raus:
KP=3.5809
TN=3.2044
Iterationen:28
Fehlerquadratte:1.346e+30

Für die Überschwingung habe ich mir folgendende Gedanken gemacht:
Code:
function hmax=nonlcon(p)
    global time sys
    Kp=p(1);
    Tn=p(2);
    PI=Kp*tf([Tn 1],[Tn 0]);            %PI-Regler
    OL=series(PI,sys);                  %offener Regelkreis
    CL=tf(feedback(OL,1));               %geschlossener Regelkreis
    [yout]=step(CL,time);               %Sprungantwort der Regelgröße
    h=yout(length(yout));
    hmax=1.1*h;
end


Ich weiß aber nicht, wie ich fmincon mitteilen soll, wie er mit dem ergänzenden Code arbeiten soll.

Gruß Spilo
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.