数値的安定性

q111

力学的安定性に加えて、私たちは、数値的安定性についても考慮する必要があります。

これは、私たちのケースでは特に真実です。なぜならば、今は、単純なオイラー法を用いて、回転を表現する四元数の積分を行っているからです。

        Quaterniond qq(0.0, omega.x()/2.0, omega.y()/2.0, omega.z()/2.0);
        qdot =  qq * q;
        q.w()   += qdot.w()   * dt;
        q.vec() += qdot.vec() * dt;
        q.normalize();

図は、四元数qの成分の時間的発展を示しています。初期条件は:

    Ibody << 1.0,0.0,0.0, 0.0,1.0,0.0, 0.0,0.0,1.0;
    Quaterniond q(AngleAxisd(M_PI*0.0, Vector3d::UnitX()));
    q.normalize();
    L << 0.00, 0.00, 2.0*M_PI;

数値的には、以下のようになります:

double dt = 0.001;
for(double t=0; t<4.0; t+= dt) {

     1   1         0   0   0
     2   0.999995  0   0   0.00314158
     3   0.99998   0   0   0.00628312

  3999   0.99998   0   0  -0.00632446
  4000   0.999995  0   0  -0.00318292
  4001   1         0   0  -4.13415e-05

四元数qは、2秒間で1回転しかしないことに注意して下さい。これに対して、物体に固定した単位Xベクトルは、1秒で1回転します。

x111

さて、4秒間ではなく40秒間のシミュレーションをやってみましょう。

double dt = 0.001;
for(double t=0; t<40.0; t+= dt) {

q111_40sec

まあ、それらしいと言えますかね。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.