分享
 
 
 

我的算法头文件使用说明

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Mylib文件使用说明

所有库函数在Turbo C 3.0下编译成功,目前共72个函数,包含数学模型和数值分析中常用的一些算法,例如各种随机数的产生,矩阵类、复数类运算,积分变换,函数图形化,表的操作,各种组合问题,图论算法等等。

1. 函数名:Error

功能:捕捉错误,结束程序

用法:void Error(char *message)

参数:message:错误信息

返回:无

2. 函数名:_Pause

功能:等待按键

用法:void _Pause(void)

参数:无

返回:无

3. 函数名:_delay

功能:延时

用法:void _delay(double delaytime)

参数:delaytime:秒数(精确到1微秒)

返回:无

4. 函数名:_time

功能:取得当前系统时间(当天经过的总秒数)

用法:double _time(void)

参数:无

返回:当天经过的总秒数(精确到1微秒)

5. 函数名:_dif

功能:计算两个时间差(可以用于计算程序的运行时间)

用法:double _dif(double start,double end)

参数:start:开始时间,end:结束时间

返回:时间差(精确到1微秒)

程序例:

#include "mylib.h"

void main()

{

double start,end,dif;

start=_time();

_delay(5.00);

end=_time();

dif=_dif(start,end);

printf("\n%lf,%lf,%lf\n",start,end,dif);

}

6. 函数名:_Alloc2

功能:分配一个二维动态数组

用法:double **_Alloc2(int r,int c)

参数:r:行数,c:列数

返回:一个二维动态数组

7. 函数名:_Alloc2_int

功能:分配一个二维动态数组(整型数组)

用法:int **_Alloc2_int(int r,int c)

参数:r:行数,c:列数

返回:一个二维动态数组

8. 函数名:_Alloc2Free

功能:释放一个二维动态数组

用法:void _Alloc2Free(double **x)

参数:一个二维动态数组

返回:无

9. 函数名:_dtoa

功能:将一个双精度型变量转换成字符串(保留三位有效的小数位数)

用法:void _dtoa(double value, char *string)

参数:value:双精度型变量,string:字符串

返回:无

10. 函数名:_putstring

功能:在图形界面下,输出字符串

用法:void _putstring(int x, int y, char *msg, int color)

参数:x:屏幕x坐标,y:屏幕y坐标,msg:字符串,color,字体颜色

返回:无

11. 函数名:_fac

功能:求一个数的阶乘(数不超过12)

用法:long _fac(int n)

参数:n:数

返回:阶乘

12. 函数名:_fac2

功能:求一个整型数的阶乘(数不超过32767)

用法:int _fac2(int n,int *a)

参数:n:数,a:一维数组(存放阶乘产生后的各个位上的数字)

返回:阶乘的位数

13. 函数名:_random

功能:产生一个在(0,1)内均匀分布的随机数,要用randomize初始化随机数发生器

用法:double _random(void)

参数:无

返回:随机数

14. 函数名:_rand

功能:产生一个在(0,seed)内均匀分布的随机整数

用法:int _rand(int seed)

参数:seed:上界

返回:随机整数

15. 函数名:_avg

功能:产生一个在(a,b)内均匀分布的随机数

用法:double _avg(double a,double b)

参数:a:下界,b:上界

返回:随机数

16. 函数名:_sta

功能:产生一个以mu为均值,sigma为方差的正态分布随机数

用法:double _sta(double mu,double sigma)

参数:mu:均值,sigma:方差

返回:正态分布随机数

17. 函数名:_sta2

功能:产生一个以mu为均值,sigma为方差的正态分布随机数(时间较快,但有bug)

用法:double _sta2(double mu,double sigma)

参数:mu:均值,sigma:方差

返回:正态分布随机数

18. 函数名:_kai

功能:产生一个以n为自由度的卡方分布

用法:double _kai(int n)

参数:n:自由度

返回:卡方分布随机数

19. 函数名:_tdis

功能:产生一个以n为自由度的t分布

用法:double _tdis(int n)

参数:n:自由度

返回:t分布随机数

20. 函数名:_F

功能:产生一个以n1和n2为自由度的F分布

用法:double _F(int n1,int n2)

参数:n1,n2:自由度

返回:F分布随机数

随机数部分程序实例:

#include "mylib.h"

void main()

{

double _kai(int n);

long i;

double r;

double s,e,d;

s=_time();

randomize();

for(i=1;i<=10000;i++)

r=_kai(12);

e=_time();

d=_dif(s,e);

printf("%lf\n",d);

}

21. 函数名:_Poisson

功能:产生一个以lam为参数的泊松分布

用法:double _Poisson(int k,double lam)

参数:k,lam:参数

返回:泊松分布随机数

22. 函数名:_mean

功能:一个数组连续部分的平均值

用法:double _mean(double *a,int start,int end)

参数:a:数组,start:数组起始位置,end:数组终了位置

返回:平均值

23. 函数名:_variance

功能:一个数组连续部分的方差

用法:double _variance(double *a,int start,int end)

参数:a:数组,start:数组起始位置,end:数组终了位置

返回:方差

24. 函数名:_Linear

功能:线性拟合

用法:double _Linear(double *x, double *y, double *a, double *b, int n)

参数:x:拟合点的横坐标列表,y:纵坐标,a:截距,b:斜率,n:点的数目

返回:拟合点方差的无偏估计量

25. 函数名:_Adj_Form

功能:由线的连接表生成邻接矩阵

用法:double **_Adj_Form(double (*a)[3], int n, int m)

参数:a:连接表(表中的前两个元素是边的两个端点,第三个元素是边的权值),n:图的总结点数,m:边的个数

返回:邻接矩阵

26. 函数名:_Floyd

功能:Floyd算法求两点之间的最短路径

用法:double _Floyd(int i,int j,int k,double **d)

参数:i,j:两个点的标记,k:节点数减一

返回:最短路径

程序例:

#include "mylib.h"

#define MAX INT_MAX

#define N 7

double di[N][N]={

{ MAX,2.0,5.0,3.0,MAX,MAX,MAX },

{ 2.0,MAX,2.0,MAX,MAX,7.0,MAX },

{ 5.0,2.0,MAX,1.0,3.0,5.0,MAX },

{ 3.0,MAX,1.0,MAX,5,MAX,MAX },

{ MAX,MAX,3.0,5.0,MAX,1.0,7.0 },

{ MAX,7.0,5.0,MAX,1.0,MAX,5.0 },

{ MAX,MAX,MAX,MAX,7.0,5.0,MAX }

} ;

void main(void)

{

double temp, **G;

int i,j;

G=_Alloc2(N,N);

for(i=0;i<N;i++)

for(j=0;j<N;j++)

G[i][j]=di[i][j];

temp=_Floyd(0,6,N-1,G);

printf("\n%lf",temp);

}

27. 函数名:_Dijkstra

功能:Dijkstra算法求两点之间的最短路径

用法:double _Dijkstra(Graph **G,int n,int s,int t, int *path, int *count)

参数:G:邻接矩阵,n:节点数,s:开始节点,t:结束节点,path:最短路径表,count:路径数

返回:最短路径

程序例:

#include "mylib.h"

#define N 9

#define m 32767

void main()

{

Graph a[N][N]={

m,4,m,m,m,m,m,8,m,

4,m,8,m,m,m,m,11,m,

m,8,m,7,m,4,m,m,2,

m,m,7,m,9,14,m,m,m,

m,m,m,9,m,10,m,m,m,

m,m,4,14,10,m,2,m,m,

m,m,m,m,m,2,m,1,6,

8,11,m,m,m,m,1,m,7,

m,m,2,m,m,m,6,7,m,

};

int *path,w,i,j,**G,count;

path=(int *)malloc(N*sizeof(int));

G=_Alloc2_int(N,N);

for(i=0;i<N;i++)

for(j=0;j<N;j++)

G[i][j]=a[i][j];

w=_Dijkstra(G,N,0,6,path,&count);

printf("\n%d\n",w);

for(i=0;i<count;i++)

{ printf("%d ",*path); path++; }

}

28. 函数名:_0618

功能:0.618法求函数最小值

用法:double _0618(double (*f)(double x),double start,double end,double eps)

参数:f:函数名,start,end:左右区间,eps:精度

返回:最小值

程序例:

#include "mylib.h"

double f(double x)

{

return x*x+x*16.0+3.0;

}

void main()

{

double f(double x);

double a,b,r,eps;

a=-10.0;b=8.0;eps=0.001;

r=_0618(f,a,b,eps);

printf("%lf\n",r);

}

29. 函数名:_2div

功能:用二分法求方程的所有单实根

用法:int _2div(double (*f)(double x), double a, double b, double h, double eps,

double *x, int n, int *m)

参数:f:函数名,a,b:左右区间,h:步长,eps:精度,x:输出参数,存放所有单实根,n:方程根个数的预估值,m:实际求得的方程根的个数

返回:函数执行状况

程序例:

#include "mylib.h"

double f(double x)

{

return sin(x);

}

void main()

{

int i,n,m;

double a,b,h,eps,*x;

n=3;

x=(double *)calloc(n,sizeof(double));

if(x==NULL) exit(1);

a=-2;

b=7;

h=0.1;

eps=1e-10;

_2div(f,a,b,h,eps,x,n,&m);

printf("m=%d\n",m);

for(i=0;i<n;i++)

printf("%e\n",x[i]);

free(x);

}

30. 函数名:_integral

功能:类抛物线法求曲线积分

用法:double _integral(double (*f)(double x),double start,double end,int n)

参数:f:函数名,start,end:左右区间,n:等分区间的数目(偶数)

返回:积分值

31. 函数名:_integral2

功能:梯形法求曲线积分

用法:double _integral2(double (*f)(double x),double start,double end,int div)

参数:f:函数名,start,end:左右区间,div:等分区间的数目

返回:积分值

32. 函数名:_comb

功能:组合

用法:long _comb(int n,int m)

参数:n, m

返回:组合

33. 函数名:_rank

功能:排列

用法:long _rank(int n,int m)

参数:n, m

返回:排列

34. 函数名:_allcomb_dg

功能:递归求所有组合情况(为_allcomb所调用)

用法:void _allcomb_dg(int* ps, int* pe, int elems, int buf[], int bufsz, int **comb, int* iCount)

参数:

返回:无

35. 函数名:_allcomb

功能:求所有组合情况

用法:void _allcomb(int *list, int n, int elems, int **comb)

参数:list:组合表,n:表的个数,elems:所取的组合个数,comb:所有组合表

返回:无

程序例:(包括_comb和_rank函数)

#include "mylib.h"

void main()

{

long c,d;

int i, j;

int elem=3, n=6, m;

int list[] = {1, 2, 3, 4, 5, 6};

int **comb;

clrscr();

comb=_Alloc2_int(_comb(n,elem),elem);

_allcomb(list,n,elem,comb);

for(i=0;i<_comb(n,elem);i++)

{

for(j=0;j<elem;j++)

printf("%d ",comb[i][j]);

printf("\n");

}

printf("Total : %d\n",_comb(n,elem));

n=12;m=7;

c=_rank(n,m);

d=_comb(n,m);

printf("%ld %ld\n",c,d);

}

36. 函数名:_allrank_dg

功能:递归求m个元素的全排列问题(为_allrank所调用)

用法:void _allrank_dg(int m, int k, int s, int *a, int *flag, int *iCount, int **rank)

参数:

返回:无

37. 函数名:_allrank

功能:求m个元素的全排列问题

用法:void _allrank(int m, int **rank)

参数:m:元素个数,rank:所有排列表

返回:无

程序例:

#include "mylib.h"

void main()

{

int **rank, i, j;

clrscr();

rank=_Alloc2_int(120,5);

_allrank(5,rank);

for(i=0;i<120;i++)

{

for(j=0;j<5;j++)

printf("%d ",rank[i][j]);

printf("\n");

if(i%20==0) getch();

}

}

38. 函数名:_bolziman

功能:退火算法Bolziman函数或Bolziman机学习规则函数

用法:int _bolziman(double de,double t)

参数:de:能量差,t:当前温度

返回:是否接受

39. 函数名:_isprime

功能:判断一个数是否是质数

用法:int _isprime(long p)

参数:p:要判断的数

返回:是否是质数

40. 函数名:_prime

功能:第n个质数的值

用法:long _prime(int n)

参数:n

返回:第n个质数

程序例:

#include "mylib.h"

void main()

{

long p=65537;

int prime=1,n=12000;

long pp;

prime=_isprime(p);

printf("%d\n",prime);

pp=_prime(n);

printf("%ld\n",pp);

}

41. 函数名:_swapi

功能:交换两个整型数据

用法:void _swapi(int *a,int *b)

参数:a,b:两个整型数据

返回:无

42. 函数名:_swapl

功能:交换两个长整型数据

用法:void _swapl(long *a,long *b)

参数:a,b:两个长整型数据

返回:无

43. 函数名:_swapd

功能:交换两个双精度型数据

用法:void _swapd(double *a,double *b)

参数:a,b:两个双精度型数据

返回:无

44. 函数名:_inv

功能:一个一维数组的转置

用法:void _inv(int *x,int n)

参数:x:一维数组,n:数组元素个数

返回:无

45. 函数名:_sort

功能:冒泡排序

用法:void _sort(double *x,int n)

参数:x:一维数组,n:数组元素个数

返回:无

46. 函数名:_max2

功能:求两个数的较大值

用法:long _max2(long n,long m)

参数:n,m:长整型数

返回:较大值

47. 函数名:_min2

功能:求两个数的较小值

用法:long _min2(long n,long m)

参数:n,m:长整型数

返回:较小值

48. 函数名:_max

功能:求一组数的最大值,并返回这个数的所在位置

用法:double _max(double *array,int n,int *id)

参数:array:一维数组,n:元素个数,id:返回的最大值的所在位置

返回:最大值

49. 函数名:_min

功能:求一组数的最大值,并返回这个数的所在位置

用法:double _min(double *array,int n,int *id)

参数:array:一维数组,n:元素个数,id:返回的最小值的所在位置

返回:最小值

50. 函数名:_GCD

功能:求两个数的最大公约数

用法:long _GCD(long m,long n)

参数:m,n

返回:最大公约数

51. 函数名:_LCM

功能:求两个数的最小公倍数

用法:long _LCM(long m,long n)

参数:m,n

返回:最小公倍数

52. 函数名:_initgraph

功能:初始化图形界面

用法:void _initgraph(void)

参数:无

返回:无

53. 函数名:_setPlotdefault

功能:设置缺省画图界面

用法:void _setPlotdefault(void)

参数:无

返回:无

54. 函数名:_Plot

功能:画一条函数曲线

用法:void _Plot(double (*f)(double x),double start,double end)

参数:f:函数方程,start,end:左右区间

返回:无

程序例:

#include "mylib.h"

double f(double x)

{

return -x*x+8*x+10;

}

void main()

{

_initgraph();

_Plot(f,2,10);

while(bioskey(1)==0) ;

closegraph();

}

55. 函数名:_Line_equation

功能:线性方程

用法:double _Line_equation(double x, double a, double b)

参数:x:横坐标,a:截距,b:斜率

返回:纵坐标

56. 函数名:_Fit

功能:图形化进行的线性拟合

用法:void _Fit(double *x, double *y, int n)

参数:x:拟合点的横坐标表,y:拟合点的纵坐标表,n:拟合点的数目

返回:无

程序例:

#include "mylib.h"

void main()

{

double x[]={2.0, 3.0, 4.0, 4.5, 5.0, 6.0, 7.2, 8.3, 8.9,10.0,14.2},

y[]={4.2, 5.5, 7.3, 9.6, 10.1,12.3,14.6,16.9,19.0,21.0,24.9};

_initgraph();

_Fit(x,y,11);

while(bioskey(1)==0) ;

closegraph();

}

57. 函数名:_Cplus

功能:复数的加法运算

用法:Complex _Cplus(Complex z1,Complex z2)

参数:z1,z2:两个复数

返回:运算后的复数

58. 函数名:_Cminus

功能:复数的减法运算

用法:Complex _Cminus(Complex z1,Complex z2)

参数:z1,z2:两个复数

返回:运算后的复数

59. 函数名:_Cmul

功能:复数的乘法运算

用法:Complex _Cmul(Complex z1,Complex z2)

参数:z1,z2:两个复数

返回:运算后的复数

60. 函数名:_Cdiv

功能:复数的除法运算

用法:Complex _Cdiv(Complex z1,Complex z2)

参数:z1,z2:两个复数

返回:运算后的复数

61. 函数名:_Cabs

功能:复数的模运算

用法:double _Cabs(Complex z)

参数:z:复数

返回:模

62. 函数名:_Croot

功能:复数的根运算

用法:void _Croot(Complex z1, int n, Complex *z)

参数:z1:复数,n:n次根,z:存放n个根

返回:无

63. 函数名:_Cpow

功能:复数的幂运算

用法:Complex _Cpow(Complex z1, double w)

参数:z1:复数,w:幂

返回:复数的幂

64. 函数名:_LAG

功能:Lagrange插值计算

用法:double _LAG(double *x, double *y, double t, int n)

参数:x:插值点的横坐标表,y:插值点的纵坐标表,t:待求的插值点,n:插值点数

返回:插值点的函数值

程序例:

#include "mylib.h"

void main()

{

int n;

double *x,*y,t,sum;

t=0.15;

n=6;

x=(double *)calloc(n,sizeof(double));

if(x==NULL) exit(1);

y=(double *)calloc(n,sizeof(double));

if(y==NULL) exit(1);

x[0]=0; x[1]=0.1; x[2]=0.195; x[3]=0.3; x[4]=0.401; x[5]=0.5;

y[0]=0.39894; y[1]=0.39695; y[2]=0.39142; y[3]=0.38138; y[4]=0.36812; y[5]=0.35206;

sum=_LAG(x,y,t,n);

printf("%lf\n",sum);

free(x);

free(y);

}

65. 函数名:_NEWT

功能:Newton插值计算

用法:double _NEWT(double *x, double *y, int n, double t)

参数:x:插值点的横坐标表,y:插值点的纵坐标表,n:插值点数,t:待求的插值点

返回:插值点的函数值

66. 函数名:_Mgauss

功能:Gauss消元法求解线性方程组

用法:int _Mgauss(double **a, double *b, int n, double ep)

参数:a:系数矩阵,b:方程值,n:方程个数,ep:精度

返回:是否有解

程序例:

#include "mylib.h"

void main()

{

int i,n;

double **a,*b,ep;

n=3;

a=_Alloc2(n,n);

b=(double *)calloc(n,sizeof(double));

if(b==NULL) exit(1);

ep=1e-12;

a[0][0]=1; a[0][1]=-1; a[0][2]=1;

a[1][0]=5; a[1][1]=-4; a[1][2]=3;

a[2][0]=2; a[2][1]=1; a[2][2]=1;

b[0]=-4; b[1]=-12; b[2]=11;

if(!_Mgauss(a,b,n,ep))

{

printf("failed!\n");

exit(1);

}

for(i=0;i<=2;i++)

printf("x[%d] = %f\n",i+1,b[i]);

_Alloc2Free(a);

free(b);

}

67. 函数名:_Mgauss2

功能:求解矩阵相乘的逆运算(AX=B)

用法:int _Mgauss2(double **a, double **b, int n, int m, double ep)

参数:a:矩阵A,b:矩阵B,n:方程的阶数,m:右端列向量个数,ep:精度

返回:是否有解

68. 函数名:_Mdjn

功能:线性对称方程组解的分解法

用法:int _Mdjn(double **a, double **c, int n, int m)

参数:a:矩阵A,c:矩阵C,n:方程的阶数,m:右端列向量个数

返回:是否有解

69. 函数名:_NOR

功能:正态分布函数(|x|<=3.5时用级数逼近,|x|>3.5时用连分式逼近)

用法:double _NOR(double x,int l)

参数:x:变量,l:l=1计算负无穷到x的积分,l=-1计算x到正无穷的积分

返回:积分值

程序例:

#include "mylib.h"

void main()

{

double x;

for(x=0;x<=5;x+=0.5)

printf("%e\t%e\t%e\n",x,_NOR(x,1),_NOR(x,-1));

}

70. 函数名:_Mdet

功能:求矩阵的行列式的值

用法:double _Mdet(double **a, int n)

参数:a:一个n*n的矩阵,n:行数

返回:行列式的值

71. 函数名:_Minv

功能:求矩阵的逆

用法:int _Minv(double t0, double *t, double *tt, int n, int m, double **b)

参数:

返回:

72. 函数名:_FFT

功能:FFT变换

用法:void _FFT(double *fr, double *fi, int n, int flag)

参数:fr:采样点的实数表,fi:采样点的虚数表,n:采样点个数,flag:flag=0表示求Fourier变换,flag=1表示求逆Fourier变换

返回:无

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有