c - 指数函数的泰勒级数展开

标签 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;
}

我已经有了其余的代码。

最佳答案

log a只需要计算一次。一个体面的编译器会为你做这件事,但以防万一。

现在每一项都是 1/i! * x^i *loga^i

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

如果需要,您可以保留运行因子,如果 (i factorial) 乘以 i(确保它是 double ,而不是整数),xp (x power) 在每次交互时乘以 x,同样的事情发生在洛加身上。

我实际上不记得要扩展一个 pow 系列,所以我只是假设你的公式是正确的。看起来基本正确。我们使用自然对数(数学符号中的 ln,C 中的 log),它与阶乘项相消,与 e^x 相关。

关于c - 指数函数的泰勒级数展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41909620/

相关文章:

c - 从 Go 包装 FUSE

c++ - 当满足两个条件时,如何在 C++ 中停止 For 循环?

计算正弦到给定定点类型的全精度,什么时候停止?

c - 泰勒级数对数实现的问题

c - 此泰勒级数代码不适用于 n=1 或 0 以外的任何值。为什么?

c - 如何在c中使用printf打印整数

c - 将字符串作为十六进制放入 Uint32_t

C 中每个 block 复制一个文件 block

c - 使用 * 作为通配符在 C 中匹配字符串