xqinghua.h
来自「该程序是用vc开发的对动态数组进行管理的DLL」· C头文件 代码 · 共 1,591 行 · 第 1/5 页
H
1,591 行
/*
int aggje(a,n,b)
int n;
double a[],b[];
1.9求解大型稀疏方程组的全选主无高斯-约当消去法
a-双精度实型二维数组,体积为n*n。存放方程组的系数矩阵。此数组在本函数中要被破坏。
n-整型变量。方程组的阶数。
b-双精度实型一维数组,长度为n。存放方程组右端的常数向量;返回时存放方程组的解。
*/
/*-- Example (函数实例) --*/
/*
#include "stdio.h"
#include "aggje.c"
main()
{ int i;
static double a[8][8]={ {0.0,0.0,-1.0,0.0,0.0,0.0,2.0,0.0},
{0.0,6.0,0.0,0.0,0.0,-6.0,0.0,0.0},
{0.0,0.0,0.0,2.0,0.0,0.0,0.0,-4.0},
{3.0,0.0,0.0,0.0,-2.0,0.0,1.0,0.0},
{0.0,0.0,6.0,0.0,0.0,0.0,5.0,0.0},
{1.0,0.0,0.0,0.0,-3.0,0.0,0.0,2.0},
{0.0,4.0,0.0,-1.0,0.0,0.0,0.0,0.0},
{0.0,0.0,1.0,0.0,-1.0,0.0,0.0,-2.0}};
static double b[8]={4.0,6.0,-8.0,-2.0,27.0,-9.0,2.0,-4.0};
if (aggje(a,8,b)!=0)
for (i=0; i<=7; i++)
printf("x(%d)=%13.7e\n",i,b[i]);
}
*/
/*-- Result (运行结果) --*/
/*
x(0)= 1.000000e+00
x(1)= 0.000000e+00
x(2)= 2.000000e+00
x(3)=-2.000000e+00
x(4)= 4.000000e+00
x(5)=-1.000000e+00
x(6)= 3.000000e+00
x(7)= 1.000000e+00
*/
/*------------ define (函数原型定义) ---------------------------*/
int agjdn(double *a,double *b,int n,int m);
/*
int agjdn(a,b,n,m)
int n,m;
double a[],b[];
1.2全选高元高斯 - 约当消去法
函数语句
int agjdn(a,b,n,m)
本函数返回一个整型标志值。若返回的标志值为0,则表示系数矩阵为奇异,输出信息为"fail";若返回的标志值不为0,则表示正常返回。
形参说明
a-双精度实型二维数组,体积为n*n。存放方程组的系数矩阵,在本函数中要被破坏。
b-双精度实型二维数组,体积为n*m。存放方程组右边m组常数向量(一列为一组);返回时存放m组解向量(一列为一组)。
n-整型变量。方程组的阶数。
m-整型变量。方程组右端常数向量的个数。
*/
/*-- Example (函数实例) --*/
/*
#include "stdio.h"
#include "agjdn.c"
main()
{ int i;
static double a[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 b[4][2]={ {9.0,0.0},{6.0,4.0},
{11.0,7.0},{-2.0,-1.0}};
if (agjdn(a,b,4,2)!=0)
for (i=0;i<=3;i++)
printf("x(%d)=%13.7e, %13.7e\n",i,b[i][0],b[i][1]);
}
*/
/*-- Result (运行结果) --*/
/*
x(0)= 9.807447e-01, 4.979313e-01
x(1)= 2.679822e-01, 1.444940e-01
x(2)=-2.226289e-01, 6.285805e-02
x(3)= 5.892743e-01, -8.131763e-02
*/
/*------------ define (函数原型定义) ---------------------------*/
int agmiv(double *a,int m,int n,double *b,double *x,double *aa,double eps,double *u,double *v,int ka);
/*
int agmiv(a,m,n,b,x,aa,eps,u,v,ka)
int m,n,ka;
double a[],b[],x[],aa[],u[],v[],eps;
1.14 求解线性最小二乘问题的广义逆法
a--双精度实型二维数组,体积为m x n。存放超定方程组的系数矩阵A;返回时其
对角线依次给出奇异值。o小l,.-,6p,其余元素均为零o
m--整型变量。系数矩阵A的行数。
n--整型变量。系数矩阵A的列数。
b--双精度实型一维数组,长度为m。存放超定方程组右端常数向量。
x--双精度实型一维数组,长度为n。返回时存放超定方程组的最小二乘解。
aa--双精度实型二维数组,体积为n*m。返回时存放系数矩阵A的广义逆A+。
eps--双精度实型变量。奇异值分解函数中的控制精度要求。
u--双精度实型二维数组,体积为m x m。返回时存放系数矩阵A的奇异值分解式
中的左奇异向量U。
v--双精度实型二维数组,体积为n x n。返回时存放系数矩阵A的奇异值分解式中
的右奇异向量vT。
ka--整型变量。ka=max(m,n)+1
*/
/*-- Example (函数实例) --*/
/*
#include "stdio.h"
#include "agmiv.c"
#include "bginv.c"
#include "bmuav.c"
main()
{ int i,m,n,ka;
static double x[3],aa[3][4],u[4][4],v[3][3];
static double a[4][3]={ {1.0,1.0,-1.0},{2.0,1.0,0.0},
{1.0,-1.0,0.0},{-1.0,2.0,1.0}};
static double b[4]={2.0,-3.0,1.0,4.0};
double eps;
m=4; n=3; ka=5; eps=0.000001;
i=agmiv(a,m,n,b,x,aa,eps,u,v,ka);
if (i>0)
{ for (i=0; i<=2; i++)
printf("x(%d)=%13.7e\n",i,x[i]);
printf("\n");
printf("MAT A+ :\n");
for (i=0; i<=2; i++)
printf("%13.7e %13.7e %13.7e %13.7e\n",
aa[i][0],aa[i][1],aa[i][2],aa[i][3]);
printf("\n");
}
}
*/
/*-- Result (运行结果) --*/
/*
x(0)=-1.190476e+00
x(1)= 9.523810e-01
x(2)=-6.666667e-01
MAT A+ :
-4.761905e-02 3.809524e-01 2.380952e-01 -4.761905e-02
2.380952e-01 9.523810e-02 -1.904762e-01 2.380952e-01
-6.666667e-01 3.333333e-01 3.333333e-01 3.333333e-01
*/
/*------------ define (函数原型定义) ---------------------------*/
int agmqr(double *a,int m,int n,double *b,double *q);
/*
int agmqr(a,m,n,b,q)
int m,n;
double a[],b[],q[];
1.13求解线性最小二乘问题的豪斯荷尔德变换法
a--双精度实型二维数组,体积为m*n。存放超定方程组的系数矩阵A;返回时存放
QR分解式中的只短阵。
m--整型变量。系数矩阵A的行数。m>=n。
n--整型变量。系数控阵A的列数。m<=n。
b--双精度实型一维数组,长度为m。存放方程组右端常数向量;返回时存放前n个
素(即b(0),b(1),…,b(n-1))存放方程组的最小二乘解。
q--双精度实型二维数组;体积为m*m。返回时存放QR分解式中的正交矩阵Q 。
*/
/*-- Example (函数实例) --*/
/*
#include "bmaqr.c"
#include "stdio.h"
#include "agmqr.c"
main()
{ int i,m,n;
static double a[4][3]={ {1.0,1.0,-1.0},{2.0,1.0,0.0},
{1.0,-1.0,0.0},{-1.0,2.0,1.0}};
static double b[4]={2.0,-3.0,1.0,4.0};
static double q[4][4];
m=4; n=3;
i=agmqr(a,m,n,b,q);
if (i!=0)
{ for (i=0; i<=2; i++)
printf("x(%d)=%13.7e\n",i,b[i]);
printf("\n");
printf("MAT Q IS:\n");
for (i=0; i<=3; i++)
printf("%13.7e %13.7e %13.7e %13.7e\n",
q[i][0],q[i][1],q[i][2],q[i][3]);
printf("\n");
printf("MAT R IS:\n");
for (i=0; i<=3; i++)
printf("%13.7e %13.7e %13.7e\n",
a[i][0],a[i][1],a[i][2]);
}
}
*/
/*-- Result (运行结果) --*/
/*
x(0)=-1.190476e+00
x(1)= 9.523810e-01
x(2)=-6.666667e-01
MAT Q IS:
-3.779645e-01 -3.779645e-01 7.559289e-01 3.779645e-01
-7.559289e-01 -3.779645e-01 -3.779645e-01 -3.779645e-01
-3.779645e-01 3.779645e-01 -3.779645e-01 7.559289e-01
3.779645e-01 -7.559289e-01 -3.779645e-01 3.779645e-01
MAT R IS:
-2.645751e+00 -1.955901e-16 7.559289e-01
0.000000e+00 -2.645751e+00 -3.779645e-01
0.000000e+00 0.000000e+00 -1.133893e+00
0.000000e+00 0.000000e+00 0.000000e+00
*/
/*------------ define (函数原型定义) ---------------------------*/
void agrad(double *a,int n,double *b,double eps,double *x);
/*
void agrad(a,n,b,eps,x)
int n;
double a[],b[],x[],eps;
1.12求解对称正定方程组的共轭梯度法
a-双精度实型二维数组,体积为n*n。存放对称正定矩阵A。
n-整型变量。方程组的阶数。
b-双精度实型一维数组,长度为n。存放方程组右端的常数向量。
Eps-双精度实型变量。控制精度要求。
x-双精度实型一维数组,长度为n。返回方程组的解向量。
*/
/*-- Example (函数实例) --*/
/*
#include "stdio.h"
#include "agrad.c"
#include "brmul.c"
main()
{ int i;
double eps,x[4];
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 b[4]={23.0,32.0,33.0,31.0};
eps=0.000001;
agrad(a,4,b,eps,x);
printf("\n");
for (i=0; i<=3; i++)
printf("x[%d]=%e\n",i,x[i]);
printf("\n");
}
*/
/*-- Result (运行结果) --*/
/*
x[0]=1.00000e+00
x[1]=1.00000e+00
x[2]=1.00000e+00
x[3]=1.00000e+00
*/
/*------------ define (函数原型定义) ---------------------------*/
int agsdl(double *a,double *b,int n,double *x,double eps);
/*
int agsdl(a,b,n,x,eps)
int n;
double a[],b[],x[],eps;
1.11高斯-赛德尔迭代法
a-双精度实型二维数组,体积为n*n。存放方程组的系数矩阵。
b-双精度实型一维数组,长度为n。存放方程组右端的常数向量。
n-整型变量。方程组的阶数。
x-双精度实型一维数组,长度为n。返回方程组的解。
Eps-双精度实型变量。给定的精度要求。
*/
/*-- Example (函数实例) --*/
/*
#include "stdio.h"
#include "agsdl.c"
main()
{ int i;
double eps;
static double a[4][4]={ {7.0,2.0,1.0,-2.0},{9.0,15.0,3.0,-2.0},
{-2.0,-2.0,11.0,5.0},{1.0,3.0,2.0,13.0}};
static double x[5],b[4]={4.0,7.0,-1.0,0.0};
eps=0.000001;
if (agsdl(a,b,4,x,eps)>0)
for (i=0;i<=3; i++)
printf("x(%d)=%13.7e\n",i,x[i]);
}
*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?