答えは,すべてdiff_eqs()です。前の例ではdiff_eqs()にはプ ラントの式しかありませんが,あくまでMATXの積分関数は diff_eqs()の返す微分値とlink_eqs()の返す入力から積分しているに 過ぎないので,微分方程式で表されるものはすべて積分してしまえば良い ことになります。
例えば,先のシステムにおいて,制御の為に必要なパラメータが次の微分
方程式で表されているとします。
Func Matrix diff_eqs(t, x, u) Real t; Matrix x, u; { Matrix A, b; Matrix dx, dp; A = [[ 0, 1, 0] [ 0, 0, 1] [-2, -3, -4]]; b = [0 0 1]'; G = I(3); a = [[ -1, 0, 1] [ 0, 1, 0] [ 0, 0, 1]]; dx = A * x + b * u; dp = -G * (x - a); return [[dx][dp]]; }となります。18行目に注目して下さい。更新則を含めたすべての状態 [[dx][dp]]を返すわけで,これにともなって当然link_eqs()の ほうも書き換える必要があります。
今まではOde()ですべての話しをしてきましたが,MATXはその目
的に応じて多くの積分関数を持っています。以下にそれぞれの簡単なアル
ゴリズムと一緒に説明します。