xqinghua.h

来自「该程序是用vc开发的对动态数组进行管理的DLL」· C头文件 代码 · 共 1,591 行 · 第 1/5 页

H
1,591 行
字号
/*-- Result (运行结果) --*/
/*
x(0)= 4.979313e-01
x(1)= 1.444939e-01
x(2)= 6.285805e-02
x(3)=-8.131763e-02
*/


/*------------  define (函数原型定义)  ---------------------------*/                                         
  int aldle(double *a,int n,int m,double *c);  
/*                                         
  int aldle(a,n,m,c)
  int n,m;
  double a[],c[];
  
1.7求解对称方程组的分解法

a-双精度实型二维数组,体积为n*n。存放方程组的系数矩阵。(应为对称矩阵)。此数组在本函数中要被破坏。
n-整型变量。方程组的阶数。
m-整型变量。方程组右端常量个数。
d-	双精度实型二维数组,体积为n*m。存放方程组右端的m组常数向量;返回时存放方程组的m组解。


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
*/
/*--  Example (函数实例) --*/
/*

  #include "stdio.h"
  #include "aldle.c"
  main()
  { int i;
    static double a[5][5]={ {5.0,7.0,6.0,5.0,1.0},
           {7.0,10.0,8.0,7.0,2.0},{6.0,8.0,10.0,9.0,3.0},
           {5.0,7.0,9.0,10.0,4.0},{1.0,2.0,3.0,4.0,5.0}};
    static double c[5][2]={ {24.0,96.0},{34.0,136.0},
           {36.0,144.0},{35.0,140.0},{15.0,60.0}};
    if (aldle(a,5,2,c)>0)
      for (i=0; i<=4; i++)
        printf("x(%d)=%13.7e,   %13.7e\n",i,c[i][0],c[i][1]);
  }

*/
/*-- Result (运行结果) --*/
/*
x(0)= 1.000000e+00,    4.000000e+00
x(1)= 1.000000e+00,    4.000000e+00
x(2)= 1.000000e+00,    4.000000e+00
x(3)= 1.000000e+00,    4.000000e+00
x(4)= 1.000000e+00,    4.000000e+00
*/


/*------------  define (函数原型定义)  ---------------------------*/                                                               
  int atlvs(double *t,int n,double *b,double *x);  
/*                                                               
  int atlvs(t,n,b,x)
  int n;
  double t[],b[],x[];

1.10求解托伯利兹方程组的列文逊方法

t-双精度实型一维数组,长度为n。存放对称T型矩阵中的元素t0,t1,---,tn-1。
n-整型变量。方程组的阶数。
b-双精度实型一维数组,长度为n。存放方程组右端常数向量。
x-双精度实型一维数组,长度为n。返回方程组的解。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
*/
/*--  Example (函数实例) --*/
/*

  #include "stdio.h"
  #include "atlvs.c"
  main()
  { int i;
    static double x[6];
    static double t[6]={6.0,5.0,4.0,3.0,2.0,1.0};
    static double b[6]={11.0,9.0,9.0,9.0,13.0,17.0};
    if (atlvs(t,6,b,x)>0)
      for (i=0; i<=5; i++)
        printf("x(%d)=%13.7e\n",i,x[i]);
  }

*/
/*-- Result (运行结果) --*/
/*
x(0)= 3.000000e+00
x(1)=-1.000000e+00
x(2)= 1.173206e-15
x(3)=-2.000000e+00
x(4)=-2.109424e-15
x(5)= 4.000000e+00
*/


/*------------  define (函数原型定义)  ---------------------------*/                                         
  int atrde(double *b,int n,int m,double *d);  
/*                                         
  int atrde(b,n,m,d)
  int n,m;
  double b[],d[];

 1.5求解三对角线方程组的追赶法

b--双精度实型一维数组,长度为m。以行为主存放三对角线矩阵中三对角线上的元素,即在b中依次存放元素:
	a00,a01,a10,a11,a12,a21,a22,a23,…….,a(n-1),(n-2),a(n-1),(n-1)
n-整型变量。方程组的阶数。
m-整型变量。N阶三对角矩阵三条对角线上的元素的个数,也是一维数组b的长度。它的値应为m=3n-2。在本函数中要对此什作检查。
c-双精度实型一维数组,长度为n。存放方程组右端的常数向量;返回时存放方程组的解。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
*/
/*--  Example (函数实例) --*/
/*

  #include "stdio.h"
  #include "atrde.c"
  main()
  { int i;
    static double b[13]={13.0,12.0,11.0,10.0,9.0,8.0,7.0,
                         6.0,5.0,4.0,3.0,2.0,1.0};
    static double d[5]={3.0,0.0,-2.0,6.0,8.0};
    if (atrde(b,5,13,d)>0)
      for (i=0;i<=4;i++)
        printf("x(%d)=%13.7e\n",i,d[i]);
  }

*/
/*-- Result (运行结果) --*/
/*
x(0)= 5.718367e+00
x(1)=-5.944898e+00
x(2)=-3.836735e-01
x(3)= 8.040816e+00
x(4)=-8.081633e+00
*/


/*------------  define (函数原型定义)  ---------------------------*/                                         
  int bchol(double *a,int n,double *det);  
/*                                         
  int bchol(a,n,det)
  int n;
  double a[],*det;

 2.9  对称正定矩阵的乔里斯基分解与行列式的求值

a--双精度实型二维数组,体积为n x n 。存放n阶对称正定短阵A;返回时,其下三
   角部分存放分解后的下三角矩阵L,其余元素均为零。
n--整型变量。对称正定矩阵A的阶数。
det--双精度实型变量指针。在该指针指向的变量中返回行列式值。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
*/
/*--  Example (函数实例) --*/
/*

  #include "stdio.h"
  #include "bchol.c"
  main()
  { int i,j;
    double det;
    static double a[4][4]={ {5.0,7.0,6.0,5.0},
                            {7.0,10.0,8.0,7.0},
                            {6.0,8.0,10.0,9.0},
                            {5.0,7.0,9.0,10.0}};
    i=bchol(a,4,&det);
    if (i>0)
      { printf("MAT L IS:\n");
        for (i=0; i<=3; i++)
          { for (j=0; j<=3; j++)
              printf("%13.7e ",a[i][j]);
            printf("\n");
          }
        printf("\n");
        printf("det(A)=%13.7e\n",det);
      }
  }

*/
/*-- Result (运行结果) --*/
/*
MAT L IS:
 2.236068e+00  0.000000e+00  0.000000e+00  0.000000e+00 
 3.130495e+00  4.472136e-01  0.000000e+00  0.000000e+00 
 2.683282e+00 -8.944272e-01  1.414214e+00  0.000000e+00 
 2.236068e+00 -6.332402e-16  2.121320e+00  7.071068e-01 

det(A)= 1.000000e+00
*/


/*------------  define (函数原型定义)  ---------------------------*/                                           
  int bcinv(double *ar,double *ai,int n);  
/*                                           
  int bcinv(ar,ai,n)
  int n;
  double ar[],ai[];
 
 2.4  复矩阵求逆的全选主元高斯-约当法

ar--双精度实型二维数组,体积为n x n。存放原矩阵A的实部;返回时存放逆矩阵的实部。
ai--双精度实型二维数组,体积为n x n。存放原矩阵A的虚部;返回时存放逆矩阵
  的虚部。
n--整型变量。矩阵阶数。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
*/
/*--  Example (函数实例) --*/
/*

  #include "stdio.h"
  #include "bcinv.c"
  #include "bcmul.c"
  main()
  { int i,j;
    static double br[4][4],bi[4][4],cr[4][4],ci[4][4];
    static double ar[4][4]={ {0.2368,0.2471,0.2568,1.2671},
                             {1.1161,0.1254,0.1397,0.1490},
                             {0.1582,1.1675,0.1768,0.1871},
                             {0.1968,0.2071,1.2168,0.2271}};
    static double ai[4][4]={ {0.1345,0.1678,0.1875,1.1161},
                             {1.2671,0.2017,0.7024,0.2721},
                             {-0.2836,-1.1967,0.3558,-0.2078},
                             {0.3576,-1.2345,2.1185,0.4773}};
    for (i=0; i<=3; i++)
    for (j=0; j<=3; j++)
      { br[i][j]=ar[i][j]; bi[i][j]=ai[i][j];}
    i=bcinv(ar,ai,4);
    if (i!=0)
      { printf("MAT AR IS:\n");
	for (i=0; i<=3; i++)
          { for (j=0; j<=3; j++)
              printf("%13.7e ",br[i][j]);
            printf("\n");
          }
        printf("\n");
        printf("MAT AI IS:\n");
        for (i=0; i<=3; i++)
          { for (j=0; j<=3; j++)
              printf("%13.7e ",bi[i][j]);
            printf("\n");
          }
        printf("\n");
        printf("MAT AR- IS:\n");
        for (i=0; i<=3; i++)
          { for (j=0; j<=3; j++)
              printf("%13.7e ",ar[i][j]);
            printf("\n");
          }
        printf("\n");
        printf("MAT AI- IS:\n");
        for (i=0; i<=3; i++)
          { for (j=0; j<=3; j++)
              printf("%13.7e ",ai[i][j]);
            printf("\n");
          }
        bcmul(br,bi,ar,ai,4,4,4,cr,ci);
        printf("\n");
        printf("MAT CR=AA- IS:\n");
        for (i=0; i<=3; i++)
          { for (j=0; j<=3; j++)
              printf("%13.7e ",cr[i][j]);
            printf("\n");
          }
        printf("\n");
        printf("MAT CI=AA- IS:\n");
        for (i=0; i<=3; i++)
          { for (j=0; j<=3; j++)
              printf("%13.7e ",ci[i][j]);
            printf("\n");
          }
      }
  }

*/
/*-- Result (运行结果) --*/
/*
MAT AR IS:
 2.368000e-01  2.471000e-01  2.568000e-01  1.267100e+00 
 1.116100e+00  1.254000e-01  1.397000e-01  1.490000e-01 
 1.582000e-01  1.167500e+00  1.768000e-01  1.871000e-01 
 1.968000e-01  2.071000e-01  1.216800e+00  2.271000e-01 

MAT AI IS:
 1.345000e-01  1.678000e-01  1.875000e-01  1.116100e+00 
 1.267100e+00  2.017000e-01  7.024000e-01  2.721000e-01 
-2.836000e-01 -1.196700e+00  3.558000e-01 -2.078000e-01 
 3.576000e-01 -1.234500e+00  2.118500e+00  4.773000e-01 

MAT AR- IS:
-5.669986e-03  4.851151e-01  2.166018e-02 -1.874068e-01 
-6.996602e-02 -4.714739e-02  5.546471e-01 -5.583729e-02 
-1.763916e-01 -1.421441e-01  7.371922e-02  2.620023e-01 
 4.848230e-01 -3.106411e-02 -1.258590e-01 -2.498309e-03 

MAT AI- IS:
 4.506499e-02 -4.816759e-01 -2.382550e-01  1.211980e-01 
 1.162225e-01  1.487048e-01  5.124807e-01 -1.430340e-01 
 1.032388e-01  1.142015e-01  4.515873e-01 -4.689941e-01 
-4.430876e-01  4.101886e-02 -1.227346e-01  9.101123e-02 

MAT CR=AA- IS:
 1.000000e+00 -2.775558e-17 -1.734723e-17 -1.170938e-17 
-1.387779e-17  1.000000e+00 -6.938894e-17 -4.065758e-17 
 0.000000e+00  1.301043e-17  1.000000e+00 -2.168404e-18 
-5.551115e-17 -3.903128e-17  3.469447e-17  1.000000e+00 

MAT CI=AA- IS:
 3.122502e-17  2.081668e-17  1.110223e-16 -2.168404e-18 
-1.387779e-17  1.474515e-17 -1.040834e-17 -2.873136e-17 
 1.019150e-17  2.913793e-17  2.133710e-16 -1.973248e-17 
 2.081668e-17 -1.474515e-17  3.677614e-16  2.699663e-17 
*/


/*------------  define (函数原型定义)  ---------------------------*/
  void bcmul(double *ar,double *ai,double *br,double *bi,int m,int n,int k,double *cr,double *ci);  
/*

⌨️ 快捷键说明

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