Exemplo n.º 1
0
    public static void rotate12(SMat3 vtav, Mat3 v)
    {
        if (vtav.m12 == 0)
        {
            return;
        }

        float c = 0, s = 0;

        Schur2.rot12(vtav, c, s);
        Givens.rot12_post(v, c, s);
    }
Exemplo n.º 2
0
    public static void rotate01(SMat3 vtav, Mat3 v)
    {
        if (vtav.m01 == 0)
        {
            return;
        }

        float c = 0, s = 0;

        Schur2.rot01(vtav, c, s);
        Givens.rot01_post(v, c, s);
    }
Exemplo n.º 3
0
    public static void Rotate01(SMat3 vtav, Mat3 v)
    {
        if (vtav.m01 == 0)
        {
            return;
        }

        double c = 0, s = 0;

        Schur2.Rot01(vtav, c, s);
        Givens.Rot01Post(v, c, s);
    }
Exemplo n.º 4
0
    public static void Rotate12(SMat3 vtav, Mat3 v)
    {
        if (vtav.m12 == 0)
        {
            return;
        }

        double c = 0, s = 0;

        Schur2.Rot12(vtav, c, s);
        Givens.Rot12Post(v, c, s);
    }
Exemplo n.º 5
0
    public static void getSymmetricSvd(SMat3 a, out SMat3 vtav, out Mat3 v,
                                       float tol, int max_sweeps)
    {
        vtav = new SMat3();
        v    = new Mat3();
        vtav.setSymmetric(a);
        v.set(1, 0, 0, 0, 1, 0, 0, 0, 1);
        float delta = tol * MatUtils.fnorm(vtav);

        for (int i = 0; i < max_sweeps && MatUtils.off(vtav) > delta; ++i)
        {
            Schur2.rotate01(out vtav, out v, vtav, v);
            Schur2.rotate02(out vtav, out v, vtav, v);
            Schur2.rotate12(out vtav, out v, vtav, v);
        }
    }