最近在复习MIT的微积分重点公开课。
对泰勒级数有了重新的认识。
平方根的求法1:使用牛顿迭代
公式如下:
double sqrt_(double x)
{
double g=x;
while(ABS(g*g-x)>0.000001)
{
g=(g+x/g)/2;
}
return g;
}
平方根的求法2:使用在x=1处的泰勒级数。
此时存在收敛区间,因此缩小x至区间内,并将缩小的倍数提取到平方根的外面。
平方根x=1处的泰勒展开:
double my_sqrt(double x){
double fa,fac,tmp;
double ans = 1;
double aans = 1;
while( x >= 2){
x /= 4;
aans *= 2;
}
fa = 1;
fac = 1;
tmp = 0.5;
for(int i = 1; i < 150; i++){
fac = fac * i;
fa = fa * tmp;
tmp = tmp - 1;
ans = ans + (fa / fac) * pow((x-1),i);
}
return ans*aans;
}