泰勒级数对数实现的问题

时间:2019-04-09 21:28:57

标签: c logarithm math.h taylor-series

我试图使用泰勒展开式来生成一个函数输出,该函数的输出近似于x的对数值(x是一个浮点数)。

泰勒级数的自然对数:

ln(x)= {n = 0(西格玛)inf}(-1)^ n *(x-1)^(n + 1)/(n + 1)

(用于sigma求和)以获得更清晰的泰勒展开图,请参见https://en.wikipedia.org/wiki/Taylor_series#First_example

此外: log(a,b)= log(a)/ log(b)(a为基数)

以下是我使用以下原则的实现:

double logtaylor(double a,double b,double prec)
{
    double suma=0,sumb=0,n;


    for(n=0;n<prec+1;++n)
    {
            suma+=(pow(-1,n)*pow(a-1,n+1)/(n+1));
            sumb+=(pow(-1,n)*pow(b-1,n+1)/(n+1));
            printf("%d)suma=%lf\n",(int)n,suma);
            printf("%d)sumb=%lf\n",(int)n,sumb);
    }


    return suma/sumb;
}

我正在测试精度为30的3到2的对数-logtaylor(2,3,30)-。

输出:

math.h: 0.630930
0)suma=1.000000
0)sumb=2.000000
1)suma=0.500000
1)sumb=0.000000
2)suma=0.833333
...
26)suma=0.711323
26)sumb=3272620.000449
27)suma=0.675609
27)sumb=-6314360.570980
28)suma=0.710091
28)sumb=12198429.497986
29)suma=0.676758
29)sumb=-23592964.635348
30)suma=0.709016
30)sumb=45680701.429168

求和a和b的两个语句除了变量外完全相同,但是它们的行为完全不同。suma非常接近于在数学标头中计算的真实值。我也使用calc确认(log(2, 3)〜0.63092975356)-而它的对应物则大幅攀升至数百万。我不能全神贯注于它。感谢您的帮助。预先感谢。

1 个答案:

答案 0 :(得分:1)

ln的泰勒级数的收敛域是(0,2]。在此范围之外,该级数不会收敛到ln x 的值;它将永远增长。换句话说,您遇到的是数学问题,而不是软件问题—软件正在正确地评估级数,但是泰勒级数在0 < x x >≤2。