示例#1
0
    public static float calcError(Mat3 A, Vector3 x, Vector3 b)
    {
        Vector3 vtmp;

        MatUtils.vmul(out vtmp, A, x);
        vtmp = b - vtmp;
        return(Vector3.Dot(vtmp, vtmp));
    }
示例#2
0
    private static float calcError(Mat3 A, Vec3 x, Vec3 b)
    {
        Vec3 vtmp;

        MatUtils.vmul(out vtmp, A, x);
        VecUtils.sub(out vtmp, b, vtmp);
        return(VecUtils.dot(vtmp, vtmp));
    }
示例#3
0
    public static float calcError(SMat3 origA, Vector3 x, Vector3 b)
    {
        Mat3    A = new Mat3();
        Vector3 vtmp;

        A.setSymmetric(origA);
        MatUtils.vmul(out vtmp, A, x);
        vtmp = b - vtmp;
        return(Vector3.Dot(vtmp, vtmp));
    }
示例#4
0
    private static float calcError(SMat3 origA, Vec3 x, Vec3 b)
    {
        Mat3 A = new Mat3();
        Vec3 vtmp;

        A.setSymmetric(origA);
        MatUtils.vmul(out vtmp, A, x);
        VecUtils.sub(out vtmp, b, vtmp);
        return(VecUtils.dot(vtmp, vtmp));
    }
示例#5
0
    public static float solveLeastSquares(Mat3 a, Vector3 b, Vector3 x, float svd_tol, int svd_sweeps, float pinv_tol)
    {
        Mat3    at;
        SMat3   ata;
        Vector3 atb;

        MatUtils.transpose(out at, a);
        MatUtils.mmul_ata(out ata, a);
        MatUtils.vmul(out atb, at, b);
        return(solveSymmetric(ata, atb, x, svd_tol, svd_sweeps, pinv_tol));
    }
示例#6
0
    public static float solveSymmetric(SMat3 A, Vector3 b, Vector3 x, float svd_tol, int svd_sweeps, float pinv_tol)
    {
        Mat3  pinv;
        Mat3  V    = new Mat3();
        SMat3 VTAV = new SMat3();

        getSymmetricSvd(A, VTAV, V, svd_tol, svd_sweeps);
        pseudoinverse(out pinv, VTAV, V, pinv_tol);
        MatUtils.vmul(out x, pinv, b);
        return(calcError(A, x, b));
    }
示例#7
0
    public static float solveSymmetric(SMat3 A, Vec3 b, out Vec3 x,
                                       float svd_tol, int svd_sweeps, float pinv_tol)
    {
        Mat3  mtmp, pinv, V;
        SMat3 VTAV;

        getSymmetricSvd(A, out VTAV, out V, svd_tol, svd_sweeps);
        psuedoinverse(out pinv, VTAV, V, pinv_tol);
        MatUtils.vmul(out x, pinv, b);
        return(calcError(A, x, b));
    }