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

📄 aaz_plu_r.c

📁 一些矩阵运算的C代码实现:矩阵一般运算
💻 C
字号:
/* gjid03.c      freeware     http://groups.yahoo.com/group/mathc/
*/
/* --------------------------------- INCLUDES ------------------------------- */
#include "y_ahfile.h"
/* ------------------------------------- FUNCTION --------------------------  */
/* Do    :                                                                    */
/*                                                                            */
/* -------------------------------------------------------------------------- */
void gjA(int n)
{
int      x;

double pbA[MXR][MXC*C2];mZ mA={MXR,MXC*C2,&pbA[0][0]};
double pbP[MXR][MXC*C2];mZ mP={MXR,MXC*C2,&pbP[0][0]};
double pbL[MXR][MXC*C2];mZ mL={MXR,MXC*C2,&pbL[0][0]};
double pbU[MXR][MXC*C2];mZ mU={MXR,MXC*C2,&pbU[0][0]};
double pbT[MXR][MXC*C2];mZ mT={MXR,MXC*C2,&pbT[0][0]};

double pinvP   [MXR][MXR*C2]; mZ minvP   ={MXR,MXR*C2,&pinvP   [0][0]};
double pinvP_LU[MXR][MXR*C2]; mZ minvP_LU={MXR,MXR*C2,&pinvP_LU[0][0]};

                     mA.rows=n;      mA.cols=n*C2;
                     mP.rows=n;      mP.cols=n*C2;
                     mL.rows=n;      mL.cols=n*C2;
                     mU.rows=n;      mU.cols=n*C2;
                     mT.rows=n;      mT.cols=n*C2;

                  minvP.rows=n;   minvP.cols=n*C2;
               minvP_LU.rows=n;minvP_LU.cols=n*C2;
/*-------------------------------- PROGRAM ---------------------------------- */
  rnd0_mZ(&mA,3);

  clrscrn();
  printf("                                                       A :");
  p_mZ(&mA);
  PLU_mZ(&mA,&mP,&mL,&mU);
  printf("                                                       P :");
  p_mZ(&mP);
  printf("                                                       L :");
  p_mZ(&mL);
  printf("                                                       U :");
  p_mZ(&mU);
  getchar();

  clrscrn();
  printf("                                                 PA = LU :\n\n");
  printf("                                                      LU :");
  mul_mZ(&mL,&mU,&mT);
  p_mZ(&mT);
  printf("                                                      PA :");
  mul_mZ(&mP,&mA,&mT);
  p_mZ(&mT);
  getchar();

  clrscrn();
  printf("                                             A = invP_LU :\n\n");
  printf("                                                       A :");
  p_mZ(&mA);
  printf("                                                 invP_LU :");
  inverse_mZ(&mP,&minvP);
  mul_mZ(&mL,&mU,&mT);
  mul_mZ(&minvP, &mT,&minvP_LU);
  p_mZ(&minvP_LU);
}

void hello(void)
{
  printf("\n Freeware by : xhunga bernard 06000 Nice France.\n");
  printf("\n                                                  ");
  printf("\n           PLU decomposition.                     ");
  printf("\n           *****************                    \n");
  printf("\n The size of mA : 2x2 ... 4x4.                  \n");
  printf("\n           ex : \"LUFR.exe\"                    \n");
  printf("\n You can choose the size :                      \n");
  printf("\n           ex : \"LUFR.exe 2\" -> mA 2x2          ");
  printf("\n                \"LUFR.exe 3\" -> mA 3x3          ");
  printf("\n                \"LUFR.exe 4\" -> mA 4x4          ");
  printf("\n\n                                                ");
  
  printf("\n                                                  ");
  printf("\n Press return to continue                         ");
  printf("\n                                                  ");

  getchar();
}

/* --------------------------------- MAIN ----------------------------------- */
int main(int argc, char *argv[])
{
time_t t;
int    n;

/*-------------------------------- PROGRAM ---------------------------------- */
  srand(time(&t));
  hello();
do
{
if( argc == 2 && atoi(argv[1]))
 {  n = atoi(argv[1]); if( n > 4){n=4;}}
else
 {  n = rndp_I(4);}
if( n < 2){n=2;}


  gjA(4);


printf("\n Press 'X' Return to stop\n");
} while(toupper(getchar())!='X');

  return 0;
}

⌨️ 快捷键说明

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