MATLABを使用して、3つのPIDコントローラゲインの自動チューニングを行うコードを作成しています。私が考えているのは、自分のシステムのエラー(目的の状態と取得したものの違い)を最小限に抑えることです。そのために、PIDゲインを入力パラメータとして受け取り、計算されたエラーを返します。すなわち:"fminunc"を使用して配列を返す関数の最小化
errors_vector = closedLoopSimulation(pidGains)
I三セットポイント(入力コマンド)を有しているので、出力errors_vector
の寸法はN私は(私の場合1000)を有する時間サンプルの数は3 * Nです。だから、私は最小限にしたい機能であり、そうするために、私はつまり、fminunc
コマンドを使用してみました:
pidGains_ini = [2.4 0.1 0.4];
func = @closedLoopSimulation;
[pid, fval] = fminunc(func, pidGains_ini)
をしかし、私は、コードの最後の部分を実行したときに、私はこのエラーを取得:
User supplied objective function must return a scalar value.
これは明らかに、errors_vector
がスカラーではなく3 * 1000の配列であるためです。
私の質問は、プログラミングの観点からは、fminunc
配列を返す関数を最小化する方法がありますか?
一方、コントロール理論の観点からは、PIDゲインを自動的に最適化する別の方法がありますか?
私は自分自身を十分に明確にしたいと思う。ベクトルを最小化
おかげで
errors_vectorの方が良いと説明できますか?タイムステップごとにエラーがあるのは明らかですが、タイムステップごとに3つあるのはなぜですか?あなたは同時に3つのアウトプットをコントロールしていますか? – tvo
[Ziegler-Nichols法](https://en.wikipedia.org/wiki/Ziegler-Nichols_method)と[中継方法](http://www.controleng.com/search/search-single-display/) relay-method-automates-pid-loop-tuning/4a5774decc.html)は、2つの一般的なPIDチューニング手法です。 – horchler
@tvoはい、これは私がやっていることです。私のシステムはMIMOであり、3つの入力コマンドと3つの制御作業がPIDコントローラから出力されています。 –