⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jn_math.h

📁 博弈论自适应功率控制中的实现
💻 H
字号:
#ifndef _jn_math_h_
#define _jn_math_h_

#include <math.h>
#include <stdlib.h> // for rand

int rand_int(int N)
{
	double d;
	d = rand();
	d = d/RAND_MAX; // cast from 0 to 1
	d = N*d;
	return (int) d; // a floor operation (rounds magnitude down)
};

double rand_double(double N)
{
	double d;
	d = rand();
	d = d/RAND_MAX; // cast from 0 to 1
	d = N*d;
	return d; // a floor operation (rounds magnitude down)
};

double AWGN_sample(void)
{
	double u1, u2;
	double r, theta;

	u1 = rand();
	u2 = rand();
	
	u1 = rand()/RAND_MAX;
	u2 = rand()/RAND_MAX;

	r = sqrt(u1*u1 + u2*u2);
	theta = atan2(u1,u2);
	
	return r*cos(theta);
};

//performed with a truncated power series
#define TWO_DIV_SQRT_PI 1.12837916709551
#define ERF_EPS 1e-13

double abs(double x)
{
	if(x < 0)
		return -x;
	else
		return x;
};

double erf(double x)
{
	double rtn_val;
	int k;
	int sign;
	double x_sqrd;
	double sum;
	double k_fact;
	double x_fact;
	double err;

	if(x > 4.5)
	{
		rtn_val = 1;
	}
	else
	{
		sum = 1;
		sign = -1;
		x_sqrd = x*x;
		x_fact = 1;
		k_fact = 1;
		err = 1;
		k = 1;
		while(abs(err) > ERF_EPS)
		{
			k_fact = k_fact*k;
			x_fact = x_fact * x_sqrd;
			err = (sign*x_fact)/ k_fact / (2*k + 1);
			sum += err;			
			sign = -sign;
			k++;
		}
		rtn_val = x*sum*TWO_DIV_SQRT_PI;
	}
	if(rtn_val > 1)
	{
		rtn_val = 1;
	}
	return rtn_val;
};

double Q(double x)
{
	double rtn_val;
	double temp;
	temp = x/sqrt(2);
	
	rtn_val = 0.5 - 0.5*erf(x/sqrt(2.0));
	
	return rtn_val;
};
#endif

⌨️ 快捷键说明

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