Ich verwende MATLAB, um einen Code zu erstellen, der die drei PID-Controller-Verstärkungen automatisch abstimmt. Die Art, wie ich darüber nachdenke, besteht darin, den Fehler (die Differenz zwischen dem gewünschten Zustand und dem erhaltenen) meines Systems zu minimieren, dafür habe ich eine Funktion programmiert, die die PID-Verstärkungen als Eingangsparameter akzeptiert und den berechneten Fehler zurückgibt, nämlich:Minimieren einer Array-zurückkehrenden Funktion mit "fminunc"
errors_vector = closedLoopSimulation(pidGains)
Da ich drei Sollwerte (Eingangsbefehle) haben, dann ist die Dimension des Ausgangs errors_vector
3 * N, wobei N die Anzahl der Zeitabtastwerte ist I (1000 in meinem Fall) aufweisen. So dass die Funktion, die ich minimieren will, ist, und so zu tun, versuchte ich mit fminunc
Befehl, nämlich:
pidGains_ini = [2.4 0.1 0.4];
func = @closedLoopSimulation;
[pid, fval] = fminunc(func, pidGains_ini)
Allerdings, wenn ich das letzte Stück Code ausführen, bekomme ich diesen Fehler:
User supplied objective function must return a scalar value.
das ist eindeutig aufgrund der Tatsache, dass errors_vector
ein 3 * 1000-Array und kein Skalar ist.
Meine Fragen wäre, aus der Sicht der Programmierung, gibt es eine Möglichkeit, dass ich fminunc
Funktionen minimieren kann, die Arrays zurückgeben?
Auf der anderen Seite, und aus der Sicht der Steuerungstheorie gibt es eine andere Möglichkeit, die PID-Verstärkungen automatisch zu optimieren?
Ich hoffe, ich habe mich klar genug gemacht.
Dank
Können Sie den errors_vector besser erklären? Es ist klar, dass es für jeden Zeitschritt einen Fehler gibt, aber warum gibt es zu jedem Zeitschritt drei? Steuern Sie drei Ausgänge gleichzeitig? – tvo
Die [Ziegler-Nichols-Methode] (https://en.wikipedia.org/wiki/Ziegler-Nichols_method) und die [Relay-Methode] (http://www.controleng.com/search/search-single-display/ relay-method-automates-pid-loop-tuning/4a5774decc.html sind zwei beliebte PID-Tuning-Schemata. – horchler
@tvo, ja das ist was ich mache. Mein System ist MIMO mit 3 Eingabebefehlen und 3 Steuerbefehlen, die vom PID-Regler ausgegeben werden. –