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 + -
显示快捷键?