xqinghua.h

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

H
1,591
字号
#ifndef _suanfa_
#define _suanfa_

#ifdef __cplusplus /* if C++, end external linkage specification */
extern "C" {
#endif

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

1.6一般带型方程组的求解

b-双精度实型二维数组,体积为n*il。存放带型矩阵A中带区内的元素,存放格式见本节的方法说明。
此数组在本函数中要被破坏。
d-双精度实型二维数组,体积为n*m。存放方程组右端的m组常数向量;返回时存放方程组的m组解。
n-整型变量。方程组的阶数。
Il-整型变量。系数矩阵的带宽。应为il=2l+1.
m-整型变量。方程组右端的常数向量的个数。

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

  #include "aband.c"
  #include "stdio.h"
  main()
  { int i;
    static double b[8][5]={ {3.0,-4.0,1.0,0.0,0.0},
    {-2.0,-5.0,6.0,1.0,0.0},{1.0,3.0,-1.0,2.0,-3.0},
    {2.0,5.0,-5.0,6.0,-1.0},{-3.0,1.0,-1.0,2.0,-5.0},
    {6.0,1.0,-3.0,2.0,-9.0},{-4.0,1.0,-1.0,2.0,0.0},
    {5.0,1.0,-7.0,0.0,0.0}};
    static double d[8][3]={ {13.0,29.0,-13.0},
    {-6.0,17.0,-21.0},{-31.0,-6.0,4.0},{64.0,3.0,16.0},
    {-20.0,1.0,-5.0},{-22.0,-41.0,56.0},{-29.0,10.0,-21.0},
    {7.0,-24.0,20.0}};
    if (aband(b,d,8,2,5,3)>0)
      for (i=0;i<=7;i++)
      printf("x(%d)=%13.7e,  %13.7e,  %13.7e\n",
            i,d[i][0],d[i][1],d[i][2]);
  }

*/
/*-- Result (运行结果) --*/
/*
x(0)= 3.000000e+00,   5.000000e+00,  -4.070908e-16
x(1)=-1.000000e+00,  -3.000000e+00,   3.000000e+00
x(2)= 1.908873e-16,   2.000000e+00,  -1.000000e+00
x(3)=-5.000000e+00,  -2.220446e-15,  -1.332268e-15
x(4)= 7.000000e+00,  -9.688431e-16,   2.000000e+00
x(5)= 1.000000e+00,   1.000000e+00,  -3.000000e+00
x(6)= 2.000000e+00,  -1.000000e+00,  -2.385245e-17
x(7)=-9.288423e-16,   4.000000e+00,  -5.000000e+00
*/


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

1.15病态方程组的求解

a--双精度实型二维数组,体积为n*n。存放方程组的系数矩阵。
n--整型变量。方程组的阶数。
b--双精度实型一绍数组,长度为n。存放方程组右端的常数向量。
eps--双精度实型变量。控制精度要求。
x--双精度实型一维数组,长度为n。返回方程组的解向量。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
*/
/*--  Example (函数实例) --*/
/*

  #include "stdio.h"
  #include "abint.c"
  #include "brmul.c"
  #include "agaus.c"
  main()
  { int k;
    double eps=0.000001,x[4];
    static double a[4][4]=
                 {{3.4336,-0.5238,0.67105,-0.15272},
                  {-0.5238,3.28326,-0.73051,-0.2689},
                  {0.67105,-0.73051,4.02612,0.01835},
                  {-0.15272,-0.2689,0.01835,2.75702}};
    static double b[4]={-1.0,1.5,2.5,-2.0};
    if (abint(a,4,b,eps,x)!=0)
      { printf("\n");
        for (k=0; k<=3; k++)
        printf("x[%d]=%13.7e\n",k,x[k]);
        printf("\n");
      }
  }

*/
/*-- Result (运行结果) --*/
/*

x[0]=-3.977180e-01
x[1]= 5.100536e-01
x[2]= 7.829837e-01
x[3]=-7.029161e-01

*/


/*------------  define (函数原型定义)  ---------------------------*/                                           
  int acgas(double *ar,double *ai,int n,double *br,double *bi);  
/*                                           
  int acgas(ar,ai,n,br,bi)
  int n;
  double ar[],ai[],br[],bi[];

1.3复系数方程组的全选主元高斯消去法

函数语句
int acgas(ar,ai,n,br,bi)
本函数返回一个整型标志值。若返回的标志值为0,则表示系数矩阵奇异,输出信息"er* *fail";若返回的标志值不为0,则表示正常返回。

形参说明
ar-双精度实型二维数组,体积n*n。存放复系数矩阵的实部,在本函数中要被破坏。
Ai--双精度实型二维数组,体积为n*n。存放复系数的虚部,在本函数中要被破坏。
n-整型变量。方程组的阶数。
Br-双精度实型一维数组,长度为n。存放方程组右端复常数向量的实部。返回时存放方程组解向量的实部。
Bi-双精度实型一维数组,长度为n。存放方程组右端复常数向量的虚部;返回时存放方程组解向量的虚部。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
*/
/*--  Example (函数实例) --*/
/*

  #include "stdio.h"
  #include "acgas.c"
  main()
  { int i;
    static double ar[4][4]={ {1.0,3.0,2.0,13.0},
                             {7.0,2.0,1.0,-2.0},
                             {9.0,15.0,3.0,-2.0},
                             {-2.0,-2.0,11.0,5.0}};
    static double ai[4][4]={ {3.0,-2.0,1.0,6.0},
                             {-2.0,7.0,5.0,8.0},
                             {9.0,-3.0,15.0,1.0},
                             {-2.0,-2.0,7.0,6.0}};
    static double br[4]={2.0,7.0,3.0,9.0};
    static double bi[4]={1.0,2.0,-2.0,3.0};
    if (acgas(ar,ai,4,br,bi)!=0)
      for (i=0;i<=3;i++)
        printf("b(%d)=%13.7e  +j %13.7e\n",i,br[i],bi[i]);
  }

*/
/*-- Result (运行结果) --*/
/*
b(0)= 6.782330e-02  +j  7.078231e-02
b(1)=-1.623413e-01  +j -7.612936e-01
b(2)= 5.985239e-01  +j -4.371312e-01
b(3)= 2.464562e-01  +j  1.139959e-01
*/


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

1.8求解对称正定义方程组的平方根法

a-双精度实型二维数组,体积为n*m。存放系数矩阵(应为对称正定矩阵);
返回时,其上三角部分存放分解后的U矩阵,即


     
u00   u01---------u0,n-1
            u11---u1,n-1
             -          -
U=            -         -
                -        -
                  -  un-1,n-1   
n-整型变量。方程组的阶数。
m-整型变量。方程组右端常数向量个数。
d-双精度实型二维数组,体积为n*m。存放方程组右端m组常数向量;
返回时,存放方程组的m组解。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
*/
/*--  Example (函数实例) --*/
/*

  #include "stdio.h"
  #include "achol.c"
  main()
  { int i;
    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}};
    static double d[4][2]={ {23.0,92.0},{32.0,128.0},
                            {33.0,132.0},{31.0,124.0}};
    if (achol(a,4,2,d)>0)
      for (i=0; i<=3; i++)
        printf("x(%d)=%13.7e,   %13.7e\n",i,d[i][0],d[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
*/


/*------------  define (函数原型定义)  ---------------------------*/                                           
  int acjdn(double *ar,double *ai,double *br,double *bi,int n,int m);  
/*                                           
  int acjdn(ar,ai,br,bi,n,m)
  int n,m;
  double ar[],ai[],br[],bi[];

1.4复系数方程组的全选主元高斯-约当消去法

ar-双精度实型二维数组,体积n*n。存放复系数矩阵的实部,在本函数中要被破坏。
Ai--双精度实型二维数组,体积为n*n。存放复系数的虚部,在本函数中要被破坏。
Br-双精度实型二维数组,体积为n*m。存放方程组右端m组复常数向量的实部;返回时存放m组解向量的实部。
Bi-双精度实型二维数组,长度为n*m。存放方程组右端m组复常数向量的虚部;返回时存放m组解向量的实部。
n-整型变量,方程组的阶数。
m-整型变量。方程组右端复常数向量的个数。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
*/
/*--  Example (函数实例) --*/
/*

  #include "stdio.h"
  #include "acjdn.c"
  main()
  { int i;
    static double ar[4][4]={ {1.0,3.0,2.0,13.0},
                             {7.0,2.0,1.0,-2.0},
                             {9.0,15.0,3.0,-2.0},
                             {-2.0,-2.0,11.0,5.0}};
    static double ai[4][4]={ {3.0,-2.0,1.0,6.0},
                             {-2.0,7.0,5.0,8.0},
                             {9.0,-3.0,15.0,1.0},
                             {-2.0,-2.0,7.0,6.0}};
    static double br[4][2]={ {2.0,-2.0},{7.0,3.0},
                             {3.0,2.0},{9.0,1.0}};
    static double bi[4][2]={ {1.0,3.0},{2.0,7.0},
                             {-2.0,9.0},{3.0,2.0}};
    if (acjdn(ar,ai,br,bi,4,2)!=0)
      for (i=0;i<=3;i++)
        printf("x(%d)=%13.7e +j %13.7e,   %13.7e +j %13.7e\n",
               i,br[i][0],bi[i][0],br[i][1],bi[i][1]);
  }

*/
/*-- Result (运行结果) --*/
/*
x(0)= 6.782330e-02 +j  7.078231e-02,    2.511789e-01 +j  5.810123e-01
x(1)=-1.623413e-01 +j -7.612936e-01,    4.024521e-01 +j -1.436012e-01
x(2)= 5.985239e-01 +j -4.371312e-01,    3.356590e-01 +j  1.034377e-01
x(3)= 2.464562e-01 +j  1.139959e-01,   -5.755388e-02 +j  2.079959e-01
*/


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

1.1全选高元高斯消去法

函数语句
int agaus(a,b,n)
本函数返回一个整型标志值。若返回的标志值为0,则表示原方程组的系数矩阵奇异,输出信息"fail";若返回的标志值不为0,则表示正常返回。

形参说明

a-	双精度实型二维数组,体积为n*n。存放方程组的系数矩阵,返回时将被破坏。
b-	双精实型一维数千组,长度为n。存放方程组右端的常量向量;返回方程组的解向量。
n-整型变量。存放方程组的阶数。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
*/
/*--  Example (函数实例) --*/
/*

  #include "stdio.h"
  #include "agaus.c"
  main()
  { int i;
    static double a[4][4]=
           { {0.2368,0.2471,0.2568,1.2671},
             {0.1968,0.2071,1.2168,0.2271},
             {0.1581,1.1675,0.1768,0.1871},
             {1.1161,0.1254,0.1397,0.1490} };
    static double b[4]={1.8471,1.7471,1.6471,1.5471};
    if (agaus(a,b,4)!=0)
      for (i=0;i<=3;i++)
        printf("x(%d)=%e\n",i,b[i]);
  }

*/
/*-- Result (运行结果) --*/
/*
x(0)=1.04058e+00
x(1)=9.87051e-01
x(2)=9.35040e-01
x(3)=8.81282e-01
*/


/*------------  define (函数原型定义)  ---------------------------*/                                                               
int aggje(double *a,int n,double *b);  

⌨️ 快捷键说明

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