大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
计算反正切函数(使用欧拉变换公式,精度很高),反正切函数的级数展开公式:
创新互联长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为槐荫企业提供专业的网站制作、做网站,槐荫网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。
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];
}
}
}
级数计算就不用我给代码了吧。
包含头文件 math.h
反3角函数有 acos(double),asin(double),atan(double),atan(double,double),
返回值 double 型,弧度值。转角度要 *180.0/3.1416
例如:
#include stdio.h
#includestdlib.h
#includemath.h
int main()
{
double x=0.5;
printf("acos=%.2lf degrees\n",acos(x) * 180.0/3.1416);
printf("asin=%.2lf degrees\n",asin(x) * 180.0/3.1416);
printf("atan=%.2lf degrees\n",atan(x) * 180.0/3.1416);
printf("atan2=%.2lf degrees\n",atan2(1.0,2.0) * 180.0/3.1416);
return 0;
}
例如要使用cos的反函数arccos,C语言里有acos()函数,在头文件math.h里。
1、C语言中,数学函数是函数的一种。指专门进行数学运算的函数,一般都在math.h头文件下。如果该标准库内存在某个函数的反函数,直接调用该反函数即可计算。
2、数学函数列表:
1)int abs(int i); 求整数的绝对值。
2)long labs(long n); 求长整型数的绝对值。
3)double fabs(double x); 求实数的绝对值。
4)double floor(double x); 求不大于x的最大整数,它相当于数学函数[x]。
扩展资料:
语言组成:基本构成。
数据类型:C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
常量与变量:常量其值不可改变,符号常量名通常用大写。
变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。
数组:如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以ASCII的NULL作为数组的结束。要特别注意的是,中括号内的索引值是从0算起的。
参考资料来源:百度百科-c语言
首先,你输出的不是正弦图像,而是反正弦图像。
#includestdio.h
#includemath.h
int
main(){
double
y;
int
x,m,i;
printf("y=sin(x)
[0x2*pi]\n");
for(y=1;y=-1;y-=0.1){//表示y的取值范围是[-1,1]
if(y=0){
m=asin(y)*10;
//反正弦函数,确定空格的数量,最大值为15
for(x=1;xm;x++)printf("
");
//printf("*",m);
printf("*");//注意此时不换行,因为后面还有一个点
for(;x31-m;x++)printf("
");//输出第二个点,并换行
printf("*\n");}
else{//同理输出y小于0的点
m=-1*asin(y)*10;
for(i=0;i32;i++)printf("
");
for(x=1;xm;x++)printf("
");
//printf("*",m);
printf("*");
for(;x31-m;x++)printf("
");
printf("*\n",m);
}
}
getchar();
return
0;
}
C语言中之数学函数
C语言提供了以下的数学函数,要使用这些函数时,在程序文件头必须加入:
#include
math.h
编译时,必须加上参数「-lm」(表示连结至数学函式库),例如「gcc
-lm
test.c」。
函数之自变量与传回之值型别见自变量或函数前之型别宣告。
函数已经在「math.h」或其它标头档宣告过了,因此在使用时不必再加型别宣告,例如「y=sin(x);」,不用写成「y=double
sin(double
x);」。
函数说明
double
sin(double
x)
x
的正弦函数值
double
cos(double
x)
x
的余弦函数值
double
tan(double
x)
x
的正切函数值
double
asin(double
x)
x
的反正弦函数值
sin-1x,x的值在
[-1,1]
之间,传回的值在
[-p/2,p/2]
之间
double
acos(double
x)
x
的反余弦函数值cos-1x,x的值在
[-1,1]
之间,传回的值在
[-p/2,p/2]
之间
double
atan(double
x)
x
的反正切函数值tan-1x,传回的值在
[-p/2,p/2]
之间
double
atan2(double
y,
double
x)
y/x
的反正切函数值tan-1(y/x),传回的值在
[-p,
p]
之间
double
sinh(double
x)
x
的双曲正弦函数值
double
cosh(double
x)
x
的双曲余弦函数值
double
tanh(double
x)
x
的双曲正切函数值
double
exp(double
x)
x
的指数函数
ex
double
log(double
x)
x
的自然对数
ln(x),x
double
log10(double
x)
x
底数为
10
的对数,log10x,x
double
pow(double
x,
double
y)
x
的
y
次方
xy
double
sqrt(double
x)
x
的根号值
√x
double
ceil(double
x)
不小于
x
的最小整数(但其型别为
double)
double
floor(double
x)
不大于
x
的最大整数(但其型别为
double)
int
abs(int
x)
整数
x
的绝对值
|x|
long
labs(long
x)
长整数
x
的绝对值
|x|
double
fabs(double
x)
实数
x
的绝对值
|x|
C 的 双曲函数是 cosh,sinh,tanh
没有反双曲函数。
双曲函数是 exp 函数 组合。
反双曲函数要自己写。