LUP

具有部分轴的 LUP 因数分解,仅指具有行排列的 LU 分解:PA=LU。

bool  LUP(

  matrix&  L,     // 下三角矩阵

  matrix&  U,     // 上三角矩阵

  matrix&  P      // 排列矩阵

   );

参数

L 键

[输出]  下三角矩阵。

U

[输出]  上三角矩阵。

P

[out]  Permutations matrix

返回值

成功时返回 true,否则返回 false。

举例

   matrix matrix_a={{1,2,3,4},

                    {5,2,6,7},

                    {8,9,3,10},

                    {11,12,14,4}};

   matrix matrix_l,matrix_u,matrix_p;

//--- LUP 分解

   matrix_a.LUP(matrix_l,matrix_u,matrix_p);

   Print("matrix_l\n",matrix_l);

   Print("matrix_u\n",matrix_u);

   Print("matrix_p\n",matrix_p);

//--- 验算是否 P * A = L * U

   Print("P * A\n",matrix_p.MatMul(matrix_a));

   Print("L * U\n",matrix_l.MatMul(matrix_u));



   /*

   matrix_l

   [[1,0,0,0]

    [0.4545454545454545,1,0,0]

    [0.7272727272727273,-0.07894736842105282,1,0]

    [0.09090909090909091,-0.2631578947368421,-0.2262773722627738,1]]

   matrix_u

   [[11,12,14,4]

    [0,-3.454545454545454,-0.3636363636363633,5.181818181818182]

    [0,0,-7.210526315789473,7.500000000000001]

    [0,0,0,6.697080291970803]]

   matrix_p

   [[0,0,0,1]

    [0,1,0,0]

    [0,0,1,0]

    [1,0,0,0]]

   P * A

   [[11,12,14,4]

    [5,2,6,7]

    [8,9,3,10]

    [1,2,3,4]]

   L * U

   [[11,12,14,4]

    [5,2,6,7]

    [8,9,3.000000000000001,10]

    [1,2,3,4]]

   */