求一数学题思路
题目要求反正弦arcsinx,但是不能用头文件math.h中的函数,最后只是用库函数来验证我一开始想用泰勒公式解决,后来发现arcsinx的n次导数似乎没有什么规律
各位有什么好的思路,真心求教
#include <stdio.h> #include <math.h> int fact(int); double xn(double,int); double Sin(double); double f(double,double); double arcsin(double,double,double); int main() { double x,a,b; printf("请输入arcsinx中所要求的x的值:\n"); scanf("%lf",&x); printf("请输入符合条件的a与b的值:\n"); scanf("%lf%lf",&a,&b); while (f(a,x)*f(b,x)>0) { printf("不符合条件,请重新输入a与b的值:\n"); scanf("%lf%lf",&a,&b); } printf("%lf %lf",arcsin(a,b,x),asin(x)); return 0; } double arcsin(double a,double b,double x)//返回arcsinx的值,即返回使f(y)=0方程的解 { double c=(a+b)/2.0; while (fabs(a-b)>1e-8)//二分法求根,精度设置 { if (f(c,x)*f(a,x)>1e-6) a=c; else b=c; c=(a+b)/2.0; } //printf("f(y)=%lf\n",f(c,x)); return c; } double f(double y,double x)//求解函数f(y)=siny-x { return Sin(y)-x; } double Sin(double x)//级数展开sinx { int flag=1; double result=0; int n=0; while ( (xn(x,2*n+1)/fact(2*n+1)) > 1e-6 )//精度设置 { result += (xn(x,2*n+1)/fact(2*n+1))*flag; flag=-flag; n++; } return result; } double xn(double x,int n)//求x的n次方 { while (n>1) { x=x*x; n--; } return x; } int fact(int n)//求阶乘 { int result=1; while (n>0) { result *= n; n--; } return result; }我想用二分法求根,sinx的级数展开等函数经过验证与库函数算出的值均相等