泰勒级数实现对数的问题

问题描述 投票:0回答:1

我尝试使用泰勒展开使函数输出近似于x的对数值(x是浮点数)。

Taylor series of natural logarithm:

ln(x)= {n = 0(sig)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;
}

我正在测试3的基数2 -logtaylor(2,3,30)的对数 - 精确度为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的两个语句完全相同,但是它们的行为完全不同。声明,非常接近实际值 - 在数学标题中计算。我也确认使用了计算(log(2,3)〜 0.63092975356) - 而它的对手正在大幅度攀升至数百万人。我无法绕过它。我感谢任何帮助。提前致谢。

c logarithm math.h taylor-series
1个回答
1
投票

ln的泰勒级数的收敛域是(0,2)。除此之外,该系列不会收敛到ln x的值;它将永远增长。换句话说,你有一个数学问题,不是软件问题 - 软件正在评估该系列,但泰勒级数不接近0 <x≤2之外的ln x。

© www.soinside.com 2019 - 2024. All rights reserved.