示例#1
0
    public static VEC LU_Solve(MAT A1, VEC b1)
    {
        MAT A = new MAT(A1);
        VEC b = new VEC(b1);
        int n = A.dim();

        A = luFact(A);
        MAT L = new MAT(n);
        MAT U = new MAT(n);

        for (int i = 1; i < n; i++)
        {
            for (int j = 0; j < i; j++)
            {
                L[i][j] = A[i][j];
            }
        }
        for (int i = 0; i < n; i++)
        {
            L[i][i] = 1;
        }

        for (int i = 0; i < n; i++)
        {
            for (int j = i; j < n; j++)
            {
                U[i][j] = A[i][j];
            }
        }
        VEC y = fwdSubs(L, b);
        VEC x = bckSubs(U, y);

        return(x);
    }
示例#2
0
 public MAT(MAT m1)
 {
     n  = m1.dim();
     va = new VEC[n];
     for (int i = 0; i < n; i++)
     {
         va[i] = new VEC(m1[i]);
     }
 }
示例#3
0
    public static MAT InverseM3(MAT A)
    {
        MAT I = unit(3);
        int n = A.dim();

        A = numericalFunctions.luFact(A);
        MAT L = new MAT(n);
        MAT U = new MAT(n);

        for (int i = 1; i < n; i++)
        {
            for (int j = 0; j < i; j++)
            {
                L[i][j] = A[i][j];
            }
        }
        for (int i = 0; i < n; i++)
        {
            L[i][i] = 1;
        }
        for (int i = 0; i < n; i++)
        {
            for (int j = i; j < n; j++)
            {
                U[i][j] = A[i][j];
            }
        }

        MAT yT = new MAT(3);

        for (int i = 0; i < 3; i++)
        {
            yT[i] = numericalFunctions.LU_Solve(L, I[i]);
        }
        MAT y  = yT.tpose();
        MAT xT = new MAT(3);

        for (int i = 0; i < 3; i++)
        {
            xT[i] = numericalFunctions.LU_Solve(U, yT[i]);
        }
        return(xT.tpose());
    }
示例#4
0
    public static MAT luFact(MAT m1)
    {
        int n = m1.dim();

        for (int i = 0; i < n; i++)
        {
            for (int j = i + 1; j < n; j++)
            {
                m1[j][i] /= m1[i][i];
            }
            for (int j = i + 1; j < n; j++)
            {
                for (int k = i + 1; k < n; k++)
                {
                    m1[j][k] -= m1[j][i] * m1[i][k];
                }
            }
        }
        return(m1);
    }