0

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 ゲインを自動的に最適化できる別の方法はありますか?

私は自分自身を十分に明確にしたことを願っています。

ありがとう

4

1 に答える 1

1

ベクトルの最小化はあまり明確に定義されていません (多目的最適化または多基準最適化と呼ばれるものがありますが、これはやや特殊化されています)。「通常の」最適化方法は、スカラー目標を最小化 (または最大化) することしかできません。あなたの場合、二乗誤差の合計を取り、それを最小化することで、そのような目的を形成できると思います。補足: これは標準的な操作手順であり、「最小二乗法」と呼ばれることがよくあります。

于 2016-05-12T17:15:40.090 に答える