MATLAB を使用して、3 つの PID コントローラー ゲインの自動調整を行うコードを作成しています。私が考えている方法は、システムのエラー (目的の状態と取得した状態の差) を最小限に抑えることです。そのために、PID ゲインを入力パラメーターとして受け取り、計算されたエラーを返す関数をコーディングしました。すなわち:
errors_vector = closedLoopSimulation(pidGains)
3 つのセット ポイント (入力コマンド) があるため、出力の次元errors_vector
は 3*N です。ここで、N は時間サンプルの数です (私の場合は 1000)。それが私が最小化したい機能です。そのために、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 ゲインを自動的に最適化できる別の方法はありますか?
私は自分自身を十分に明確にしたことを願っています。
ありがとう