xcpivbst.h

来自「基本矩阵运算 : + - *, power, transpose, trace,」· C头文件 代码 · 共 164 行

H
164
字号
/* xcpivbst.h                   freeware                   xhunga@tiscali.fr  */


/* --------------------------------- FUNCTION ------------------------------  */
/* Do    :                                                                    */
/*                                                                            */
/* -------------------------------------------------------------------------- */
int pivotbestFdenom(
PmF m,
    int row,
    int col)
{
fraction      pivot;
fraction belowpivot;
   int  sign =     1;
   int  row2 = row+1;

      frowmini_F(m,row);

  pivot.n = (*(m->pb+row *m->cols+col*C2   ));
  pivot.d = (*(m->pb+row *m->cols+col*C2+1));

   while(row2 < m->rows)
   {
    frowmini_F(m,row2);
    belowpivot.n = *(m->pb+row2 *m->cols+col*C2    );
    belowpivot.d = *(m->pb+row2 *m->cols+col*C2+1);

       if(fabs(belowpivot.d) < fabs(pivot.d))
         {
          if(belowpivot.n)
            {
             swaprow_mF(m,row,row2);
        pivot.n = belowpivot.n;
        pivot.d = belowpivot.d;
              sign *= -1;
            }
         }

       if(fabs(belowpivot.d) == fabs(pivot.d))
         {
          if(belowpivot.n)
           {
           if(fabs(belowpivot.n) < fabs(pivot.n))
            {
             swaprow_mF(m,row,row2);
        pivot.n = belowpivot.n;
        pivot.d = belowpivot.d;
             sign *= -1;
            }
          }
         }
    row2++;
   }

return(sign);
}

/* --------------------------------- FUNCTION ------------------------------  */
/* Do    :                                                                    */
/*                                                                            */
/* -------------------------------------------------------------------------- */
int pivotbestFnumermax(
PmF m,
    int row,
    int col)
{
fraction      pivot;
fraction belowpivot;
   int  sign =       1;
   int  row2 = row+1;

      frowmini_F(m,row);

  pivot.n = (*(m->pb+row *m->cols+col*C2  ));
  pivot.d = (*(m->pb+row *m->cols+col*C2+1));

   while(row2 < m->rows)
   {
    frowmini_F(m,row2);
    belowpivot.n = *(m->pb+row2 *m->cols+col*C2  );
    belowpivot.d = *(m->pb+row2 *m->cols+col*C2+1);

       if(fabs(belowpivot.n) > fabs(pivot.n))
         {
            {
             swaprow_mF(m,row,row2);
        pivot.n = belowpivot.n;
        pivot.d = belowpivot.d;
              sign *= -1;
            }
         }

       if(fabs(belowpivot.n) == fabs(pivot.n))
         {
           if(fabs(belowpivot.d) > fabs(pivot.d))
            {
             swaprow_mF(m,row,row2);
        pivot.n = belowpivot.n;
        pivot.d = belowpivot.d;
             sign *= -1;
            }
         }
    row2++;
   }

return(sign);
}

/* --------------------------------- FUNCTION ------------------------------  */
/* Do    :                                                                    */
/*                                                                            */
/* -------------------------------------------------------------------------- */
int pivotbestFnumer(
PmF m,
    int row,
    int col)
{
fraction      pivot;
fraction belowpivot;
   int  sign =       1;
   int  row2 = row+1;

      frowmini_F(m,row);

  pivot.n = (*(m->pb+row *m->cols+col*C2  ));
  pivot.d = (*(m->pb+row *m->cols+col*C2+1));

   while(row2 < m->rows)
   {
    frowmini_F(m,row2);
    belowpivot.n = *(m->pb+row2 *m->cols+col*C2   );
    belowpivot.d = *(m->pb+row2 *m->cols+col*C2+1);

       if(fabs(belowpivot.n) < fabs(pivot.n))
         {
          if(belowpivot.n)
            {
             swaprow_mF(m,row,row2);
        pivot.n = belowpivot.n;
        pivot.d = belowpivot.d;
              sign *= -1;
            }
         }

       if(fabs(belowpivot.n) == fabs(pivot.n))
         {
           if(fabs(belowpivot.d) < fabs(pivot.d))
            {
             swaprow_mF(m,row,row2);
        pivot.n = belowpivot.n;
        pivot.d = belowpivot.d;
             sign *= -1;
            }
         }
    row2++;
   }

return(sign);
}



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?