指数函数的泰勒级数展开式

时间:2017-01-28 12:08:22

标签: c taylor-series

我必须用C编写一个程序,它计算pow(a,x)函数的扩展。我确定我的代码错了,有人可以帮我吗?

扩张:

1 + x log(a) + 1/2 x^2 log^2(a) + 1/6 x^3 log^3(a) + 1/24 x^4 log^4(a) + 1/120 x^5 log^5(a) +...

不使用pow功能。下一个表达式必须从前一个表达式计算。

这是我设法带来的:

double series(double x)
{
int i;
double s,w,x2;
s=x;
w=x;
    for(i=1;i<LWS;i++)
{
    w=(w*x/(i+1))*log10(x);
    s+=w;
}
return s;
}

我已经有了其余的代码。

2 个答案:

答案 0 :(得分:0)

log a只需要计算一次。一个不错的编译器会为你做这件事,但为了以防万一,请帮助它。

每个学期现在都是1 / i! * x ^ i * loga ^ i

1 / i!术语增长非常快,意味着在几次迭代中,除非x很大,否则误差可以忽略不计。

如果你愿意,你可以保持运行因子,如果(i factorial)乘以i(确保它是一个double,而不是一个整数),xp(x power)在每个interation上乘以x并且相同的东西发生在loga。

我实际上还记得要扩展一个战俘系列,所以我只是假设你的公式是正确的。它看起来基本正确。我们使用自然日志(数学符号中的ln,登录C)哪种取消与因子项有关,这与e ^ x有关。

答案 1 :(得分:0)

基本上,你正在做的是:a^x = e^(x * ln(a))然后使用泰勒的e系列扩展。

您的代码中有一些错误:

  1. 由于您正在使用e的扩展,因此您需要使用自然对数(基数e),而不是以10为基础的对数。
  2. 循环外s的初始值必须设置为1。这是因为a^x = 1 when x=0(如果a != 0)。
  3. 在循环外,w必须设置为1。这是x * ln(a)的一组很好的权力。在w=x之前,x的力量将超过ln(a)的力量。
  4. i必须从i=0开始循环播放。这是为了在进行上述更改后立即获得阶乘。
  5. 所以代码变成:

    double series(double x)
    {
        int i;
        double s,w,x2;
        s=1.0;
        w=1.0;
        for(i=0;i<LWS;i++)
        {
            w=(w*x/(i+1))*log(x);
            s+=w;
        }
        return s;
    }