答えは,すべて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はその目
的に応じて多くの積分関数を持っています。以下にそれぞれの簡単なアル
ゴリズムと一緒に説明します。