NANA介绍
前言
NANA库是笔者用C++实现的SDK,笔者希望其成为一个用于教学和数学爱好者学习数学的SDK。读者可以访问NANA源代码下载源代码。访问NANA相关文档查看相关文档。笔者希望给大家带来更丰富的内容,更稳定的SDK。
NANA库的功能
解方程
例如,一元二次方程的解法
/*
* ret返回值:1表示有两个是根
* 0 两个相等的根
* -1两个虚根
* -2
*/
int QuadraticEquationSolving(double a, double b, double c, Complex &x1, Complex & x2) {
if (fabs(a) <= eps)
return -2;//不满足条件
int ret;
double d = b * b - 4.0*a*c;
double r1, r2;
double i1 = 0.0;
double i2 = 0.0;
double temp;
if (d > fabs(eps)) {
double root = sqrt(d);
temp = -b - sign(b)*root;
r1 = 2.0 * c / temp;
r2 =temp / 2 / a;
ret = 1;
}
else if(fabs(d)<=fabs(eps)){
double root = sqrt(d);
temp = -b - sign(b)*root;
r2 = r1 = 2 * c / temp;
ret = 0;
}
else {
double doua = 2.0*a;
r1 = r2 = -b / (doua);
i1 = sqrt(-d)/ doua;
i2 = -i1;
ret = -1;
}
x1 = Complex(r1, i1);
x2 = Complex(r2, i2);
return ret;
}
统计理论运算库
例如,Box-muller变换生成正态分布的随机数
/*
*randn返回0-1的正态分布的随机数
*类型T 允许的三种形式float double long double
*/
template<typename T>
void randn(T & y, uint seed = 0, bool flag = false) {
if (!flag) {
srand(time(NULL));
}
else {
srand(seed);
}
T x1, x2;
x1 = rand() % RAND_MAX / (T)RAND_MAX;
x2 = rand() % RAND_MAX / (T)RAND_MAX;
y = sqrt(-2 * log(x1))*cos(2.0 * NA_PI*x2);
}
实现矩阵运算
数值分析算法
仿生学算法
GA模块中提供了遗传算法的实现过程
神经网络
笔者的话
笔者郑重承诺,NANA将永远免费,且在笔者能够码得动代码的岁月里,一直更新下去。