⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xdet1.h

📁 基本矩阵运算 : + - *, power, transpose, trace, determinant, minor, matrix of minor, cofactor, matrix of co
💻 H
字号:
/* xdet1.h                      freeware                   xhunga@tiscali.fr  */



/* --------------------------------- FUNCTION ------------------------------  */
/* Do    :                                                                    */
/*                                                                            */


/* -------------------------------------------------------------------------- */
fraction detFbasic(
PmF mA)
{
      int row1;
      int row2;
      int n;
   double coefnulldoNothing = 1;
 fraction deter;

double pbAT [MXR][MXC*C2];mF mAT ={MXR,MXC*C2,&pbAT [0][0]};

 n = mA->rows;
                mAT.rows=n       ;
                mAT.cols=n*C2;

 deter.n = 1;
 deter.d = 1;

 copy_mF(mA,&mAT);

/*--------------------------------------------------------------------  gauss */
for (row1 = 0 ; row1 < mAT.rows - 1 ; row1++)
{
   deter.n *= pivotntzeroF(&mAT,row1,row1);           /*    Pivot row     */
   deter        =     rowmini_F(&mAT,row1,deter);
                     frowmini_F(&mAT,row1      );          /* a) fraction mini */

  for (row2 = row1+1 ; row2 < mAT.rows ; row2++)
    {                                                   /*    Before the work */
               deter = rowmini_F(&mAT,row2,deter);
                      frowmini_F(&mAT,row2);             /* a) fraction mini   */

     coefnulldoNothing = *(mAT.pb+row2 *mAT.cols+row1*C2);

        if(!(coefnulldoNothing==0))
        {
                pivotworkF(&mAT,row1,row2);             /*     After the work */
          deter = rowmini_F(&mAT,row2,deter);
                 frowmini_F(&mAT,row2);                  /*  a) fraction mini  */

          deter.n *=  *(mAT.pb+row1 *mAT.cols+row1*C2+1);
          deter.d *=  *(mAT.pb+row1 *mAT.cols+row1*C2  );

                 deter = mini_F(deter);
      }
     }
}
/*------------------------------------------------------------------ Diagonal */
    for (row1 = 0 ; row1 < mAT.rows ; row1++)
     {
       deter.n *= *(mAT.pb+row1 *mAT.cols+row1*C2     );
       deter.d *= *(mAT.pb+row1 *mAT.cols+row1*C2 +1);

              deter = mini_F(deter);
      }

 return(deter);
}


/* --------------------------------- FUNCTION ------------------------------  */
/* Do    :                                                                    */
/*                                                                            */


/* -------------------------------------------------------------------------- */
fraction detFbasicT(
PmF mA)
{
      int row1;
      int row2;
      int n;
   double coefnulldoNothing = 1;
 fraction deter;

double pbAT [MXR][MXC*C2];mF mAT ={MXR,MXC*C2,&pbAT [0][0]};

 n = mA->rows;
                mAT.rows=n       ;
                mAT.cols=n*C2;

 deter.n = 1;
 deter.d = 1;

 transpose_mF(mA,&mAT);

/* copy_mF(mA,&mAT); */

/*--------------------------------------------------------------------  gauss */
for (row1 = 0 ; row1 < mAT.rows - 1 ; row1++)
{
   deter.n *= pivotntzeroF(&mAT,row1,row1);           /*    Pivot row     */
   deter        =     rowmini_F(&mAT,row1,deter);
                     frowmini_F(&mAT,row1      );          /* a) fraction mini */

  for (row2 = row1+1 ; row2 < mAT.rows ; row2++)
    {                                                   /*    Before the work */
               deter = rowmini_F(&mAT,row2,deter);
                      frowmini_F(&mAT,row2);             /* a) fraction mini   */

     coefnulldoNothing = *(mAT.pb+row2 *mAT.cols+row1*C2);

        if(!(coefnulldoNothing==0))
        {
                pivotworkF(&mAT,row1,row2);             /*     After the work */
          deter = rowmini_F(&mAT,row2,deter);
                 frowmini_F(&mAT,row2);                  /*  a) fraction mini  */

          deter.n *=  *(mAT.pb+row1 *mAT.cols+row1*C2+1);
          deter.d *=  *(mAT.pb+row1 *mAT.cols+row1*C2  );

                 deter = mini_F(deter);
      }
     }
}
/*------------------------------------------------------------------ Diagonal */
    for (row1 = 0 ; row1 < mAT.rows ; row1++)
     {
       deter.n *= *(mAT.pb+row1 *mAT.cols+row1*C2  );
       deter.d *= *(mAT.pb+row1 *mAT.cols+row1*C2+1);

              deter = mini_F(deter);
      }

 return(deter);
}


/* --------------------------------- FUNCTION ------------------------------  */
/* Do    :                                                                    */
/*                                                                            */


/* -------------------------------------------------------------------------- */
fraction detFnumerMini(
PmF mA)
{
      int row1;
      int row2;
      int n;
   double coefnulldoNothing = 1;
 fraction deter;

double pbAT [MXR][MXC*C2];mF mAT ={MXR,MXC*C2,&pbAT [0][0]};

 n = mA->rows;
                mAT.rows=n       ;
                mAT.cols=n*C2;

 deter.n = 1;
 deter.d = 1;

 copy_mF(mA,&mAT);

/*--------------------------------------------------------------------  gauss */
for (row1 = 0 ; row1 < mAT.rows - 1 ; row1++)
{
   deter.n *=  pivotntzeroF(&mAT,row1,row1);          /*    Pivot row     */
   deter        =      rowmini_F(&mAT,row1,deter);
                      frowmini_F(&mAT,row1     );          /* a) fraction mini */
   deter.n *=  pivotbestFnumer(&mAT,row1,row1);
               deter = rowmini_F(&mAT,row1,deter);
                      frowmini_F(&mAT,row1      );         /* a) fraction mini */

  for (row2 = row1+1 ; row2 < mAT.rows ; row2++)
    {                                                   /*    Before the work */
                    deter = rowmini_F(&mAT,row2,deter);
                           frowmini_F(&mAT,row2);        /* a) fraction mini   */

     coefnulldoNothing = *(mAT.pb+row2 *mAT.cols+row1*C2);

        if(!(coefnulldoNothing==0))
        {

                pivotworkF(&mAT,row1,row2);             /*     After the work */
          deter = rowmini_F(&mAT,row2,deter);
                 frowmini_F(&mAT,row1);                  /*  a) fraction mini  */

          deter.n *=  *(mAT.pb+row1 *mAT.cols+row1*C2+1);
          deter.d *=  *(mAT.pb+row1 *mAT.cols+row1*C2  );

                 deter = mini_F(deter);
      }
     }
}
/*------------------------------------------------------------------ Diagonal */
    for (row1 = 0 ; row1 < mAT.rows ; row1++)
     {
       deter.n *= *(mAT.pb+row1 *mAT.cols+row1*C2  );
       deter.d *= *(mAT.pb+row1 *mAT.cols+row1*C2+1);

              deter = mini_F(deter);
      }

 return(deter);
}

/* --------------------------------- FUNCTION ------------------------------  */
/* Do    :                                                                    */
/*                                                                            */


/* -------------------------------------------------------------------------- */
fraction detFnumerMiniT(
PmF mA)
{
      int row1;
      int row2;
      int n;
   double coefnulldoNothing = 1;
 fraction deter;

double pbAT [MXR][MXC*C2];mF mAT ={MXR,MXC*C2,&pbAT [0][0]};

 n = mA->rows;
                mAT.rows=n       ;
                mAT.cols=n*C2;

 deter.n = 1;
 deter.d = 1;

 transpose_mF(mA,&mAT);

/*--------------------------------------------------------------------  gauss */
for (row1 = 0 ; row1 < mAT.rows - 1 ; row1++)
{
   deter.n *=  pivotntzeroF(&mAT,row1,row1);          /*    Pivot row     */
   deter        =      rowmini_F(&mAT,row1,deter);
                      frowmini_F(&mAT,row1     );          /* a) fraction mini */
   deter.n *=  pivotbestFnumer(&mAT,row1,row1);
               deter = rowmini_F(&mAT,row1,deter);
                      frowmini_F(&mAT,row1      );         /* a) fraction mini */

  for (row2 = row1+1 ; row2 < mAT.rows ; row2++)
    {                                                   /*    Before the work */
                    deter = rowmini_F(&mAT,row2,deter);
                           frowmini_F(&mAT,row2);        /* a) fraction mini   */

     coefnulldoNothing = *(mAT.pb+row2 *mAT.cols+row1*C2);

        if(!(coefnulldoNothing==0))
        {

                pivotworkF(&mAT,row1,row2);             /*     After the work */
          deter = rowmini_F(&mAT,row2,deter);
                 frowmini_F(&mAT,row1);                  /*  a) fraction mini  */

          deter.n *=  *(mAT.pb+row1 *mAT.cols+row1*C2+1);
          deter.d *=  *(mAT.pb+row1 *mAT.cols+row1*C2  );

                 deter = mini_F(deter);
      }
     }
}
/*------------------------------------------------------------------ Diagonal */
    for (row1 = 0 ; row1 < mAT.rows ; row1++)
     {
       deter.n *= *(mAT.pb+row1 *mAT.cols+row1*C2  );
       deter.d *= *(mAT.pb+row1 *mAT.cols+row1*C2+1);

              deter = mini_F(deter);
      }

 return(deter);
}


/* --------------------------------- FUNCTION ------------------------------  */
/* Do    :                                                                    */
/*                                                                            */


/* -------------------------------------------------------------------------- */
fraction detFdenomMini(
PmF mA)
{
      int row1;
      int row2;
      int n;
   double coefnulldoNothing = 1;
 fraction deter;

double pbAT [MXR][MXC*C2];mF mAT ={MXR,MXC*C2,&pbAT [0][0]};

 n = mA->rows;
                mAT.rows=n       ;
                mAT.cols=n*C2;

 deter.n = 1;
 deter.d = 1;

 copy_mF(mA,&mAT);

/*--------------------------------------------------------------------  gauss */
for (row1 = 0 ; row1 < mAT.rows - 1 ; row1++)
{
   deter.n *=  pivotntzeroF(&mAT,row1,row1);          /*    Pivot row     */
   deter        =      rowmini_F(&mAT,row1,deter);
                      frowmini_F(&mAT,row1     );          /* a) fraction mini */
   deter.n *=  pivotbestFdenom(&mAT,row1,row1);
               deter = rowmini_F(&mAT,row1,deter);
                      frowmini_F(&mAT,row1     );          /* a) fraction mini */

  for (row2 = row1+1 ; row2 < mAT.rows ; row2++)
    {                                                   /*    Before the work */
                    deter = rowmini_F(&mAT,row1,deter);
                           frowmini_F(&mAT,row2);        /* a) fraction mini   */

     coefnulldoNothing = *(mAT.pb+row2 *mAT.cols+row1*C2);

        if(!(coefnulldoNothing==0))
        {

                pivotworkF(&mAT,row1,row2);             /*     After the work */
          deter = rowmini_F(&mAT,row2,deter);
                 frowmini_F(&mAT,row1);                  /*  a) fraction mini  */

          deter.n *=  *(mAT.pb+row1 *mAT.cols+row1*C2+1);
          deter.d *=  *(mAT.pb+row1 *mAT.cols+row1*C2  );

                 deter = mini_F(deter);
      }
     }
}
/*------------------------------------------------------------------ Diagonal */
    for (row1 = 0 ; row1 < mAT.rows ; row1++)
     {
       deter.n *= *(mAT.pb+row1 *mAT.cols+row1*C2  );
       deter.d *= *(mAT.pb+row1 *mAT.cols+row1*C2+1);

              deter = mini_F(deter);
      }

 return(deter);
}


/* ------------------------------ FUNCTION ---------------------------- det() */
/*                                                                            */
/* -------------------------------------------------------------------------- */
fraction detFdenomMiniT(
PmF mA)
{
      int row1;
      int row2;
      int n;
   double coefnulldoNothing = 1;
 fraction deter;

double pbAT [MXR][MXC*C2];mF mAT ={MXR,MXC*C2,&pbAT [0][0]};

 n = mA->rows;
                mAT.rows=n       ;
                mAT.cols=n*C2;

 deter.n = 1;
 deter.d = 1;

 transpose_mF(mA,&mAT);

/*--------------------------------------------------------------------  gauss */
for (row1 = 0 ; row1 < mAT.rows - 1 ; row1++)
{
   deter.n *=  pivotntzeroF(&mAT,row1,row1);          /*    Pivot row     */
   deter        =      rowmini_F(&mAT,row1,deter);
                      frowmini_F(&mAT,row1     );          /* a) fraction mini */
   deter.n *=  pivotbestFdenom(&mAT,row1,row1);
               deter = rowmini_F(&mAT,row1,deter);
                      frowmini_F(&mAT,row1     );          /* a) fraction mini */

  for (row2 = row1+1 ; row2 < mAT.rows ; row2++)
    {                                                   /*    Before the work */
                    deter = rowmini_F(&mAT,row1,deter);
                           frowmini_F(&mAT,row2);        /* a) fraction mini   */

     coefnulldoNothing = *(mAT.pb+row2 *mAT.cols+row1*C2);

        if(!(coefnulldoNothing==0))
        {

                pivotworkF(&mAT,row1,row2);             /*     After the work */
          deter = rowmini_F(&mAT,row2,deter);
                 frowmini_F(&mAT,row1);                  /*  a) fraction mini  */

          deter.n *=  *(mAT.pb+row1 *mAT.cols+row1*C2+1);
          deter.d *=  *(mAT.pb+row1 *mAT.cols+row1*C2  );

                 deter = mini_F(deter);
      }
     }
}
/*------------------------------------------------------------------ Diagonal */
    for (row1 = 0 ; row1 < mAT.rows ; row1++)
     {
       deter.n *= *(mAT.pb+row1 *mAT.cols+row1*C2  );
       deter.d *= *(mAT.pb+row1 *mAT.cols+row1*C2+1);

              deter = mini_F(deter);
      }

 return(deter);
}



⌨️ 快捷键说明

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