重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
计算反正切函数(使用欧拉变换公式,精度很高),反正切函数的级数展开公式:
创新互联公司专注于凭祥网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供凭祥营销型网站建设,凭祥网站制作、凭祥网页设计、凭祥网站官网定制、小程序制作服务,打造凭祥网络公司原创品牌,更为您提供凭祥网站排名全网营销落地服务。
f(x) = x - x^3/3 + x^5/5 +...+ (-1)^k * x^(2k+1)/(2k + 1)+...
当|x| 1时,级数绝对值发散,无法直接使用欧拉公式计算。因此可以通过下面的公式
进行等价转换之后再进行计算。
等价转换公式:
a) ATan(1/x) = Pi/2 - ATan(x)
b) ATan(-x) = - ATan(x)
特殊情况
0 = ArcTan(0)
Pi/2 = ArcTan(无穷大)
//
// 欧拉公式
//
// sum是和,term是通项值,jterm初始为1,以后按1递增。wrksp是工作单元,视jterm的
// 最大值而定。
//
void eulsum(int nterm,double *sum,double term,int jterm,double wrksp[])
{
double tmp,dum;
if(jterm == 1)
{
nterm = 1;
wrksp[1] = term;
*sum = 0.5 * term;
}
else
{
tmp = wrksp[1];
wrksp[1] = term;
for(int j=1; j = nterm; j++)
{
dum = wrksp[j+1];
wrksp[j+1] = 0.5 * (wrksp[j] + tmp);
tmp = dum;
}
if(fabs(wrksp[nterm + 1]) = fabs(wrksp[nterm]))
{
*sum = *sum + 0.5 * wrksp[nterm + 1];
nterm = nterm + 1;
}
else
{
*sum = *sum + wrksp[nterm + 1];
}
}
}
级数计算就不用我给代码了吧。
简单的说就是整数阶乘的推广,它有一个积分的表达式:
Γ(x)=∫e^(-t)*t^(x-1)dt (积分的下限式0,上限式+∞)
算法源自《常用算法程序集》徐士良
#include "stdio.h"
double gam1(x)
double x;
{ int i;
double y,t,s,u;
static double a[11]={ 0.0000677106,-0.0003442342,
0.0015397681,-0.0024467480,0.0109736958,
-0.0002109075,0.0742379071,0.0815782188,
0.4118402518,0.4227843370,1.0};
if (x=0.0)
{ printf("err**x=0!\n"); return(-1.0);}
y=x;
if (y=1.0)
{ t=1.0/(y*(y+1.0)); y=y+2.0;}
else if (y=2.0)
{ t=1.0/y; y=y+1.0;}
else if (y=3.0) t=1.0;
else
{ t=1.0;
while (y3.0)
{ y=y-1.0; t=t*y;}
}
s=a[0]; u=y-2.0;
for (i=1; i=10; i++)
s=s*u+a[i];
s=s*t;
return(s);
}
int function(double **p, int p_r,int p_c, double **q,int q_r, int q_c, double **re) {
int i,j;
if(p == NULL || q == NULL || p_r != q_r || p_c != q_c) {
re = NULL;
return 1;
}
if(p_r * p_c 1024) {
re = NULL;
return 2;
}
for(i = 0; i p_r; ++i)
for(j = 0; j p_c; ++j)
re[i][j] = p[i][j] - q[i][j];
return 0;
}