关于数学题arcsinx的求解
前两天发了帖子获取思路,Amy_huyier网友回帖给予了好几个解法,我前天试了试,但是用二分法在迭代过程出现了一些问题刚刚我使用另外一种定积分定义进行了运算,成功得到了arcsinx的结果,误差基于在进行分割0到x区间的n值的大小,我选择n=10000000,误差缩小到了1e-4,
求解平方根的迭代不需要太大,我一开始设置很大,发觉没必要并且机器已经反应不过来。。。。。。cpu利用率疯狂飙升
后来经过调试n=10就可以把平方根精确到大约1e-6次方的精度了。(囧了。。。刚才改了一下,其实只要迭代10次精度都可以达到很高要求。。。)
现在发觉高数还真没白学。。。大家一起好好学各种数学哇~~~~~
下面紧跟是成功用定积分定义求出的arcsinx,在下面一贴是我前几天失败的案例,希望大家有时间帮我看看哪里出了问题,非常感谢
程序代码:
#include <stdio.h> #include <math.h> int main() { double sqr(double a); double arcsin(double x); double x; scanf("%lf",&x); printf("mine arcsinx = %lf\n\"math.h\"asinx = %lf\n",arcsin(x),asin(x)); return 0; } double sqr(double a)//迭代法求根号a { double y=a; long n=10;//改为10 do { y = (y+a/y)/2; n--; }while(n>0); return y; } double inside(long i,long n,double x) { return 1/sqr(1-(i*x/n)*(i*x/n)); } double arcsin(double x)//使用积分定义算1/sqtr(1-x*x)的积分,积分下限为0,上限为x,积分完成后返回arcsinx的值 { double result=0; long i=0,n=10000000;//0到x的区间分成n份 double outside=x/n; while(i<n) { result += outside*inside(i,n,x); i++; } return result; }
[ 本帖最后由 baobaoisme 于 2011-2-28 20:10 编辑 ]