1

我正在尝试使用泰勒级数来开发一个数值合理的算法来解决一个函数。我已经有一段时间了,但还没有运气。我不确定我做错了什么。

功能是

f(x)=1 + x - sin(x)/ln(1+x)   x~0

另外:为什么这个函数甚至会出现精度损失?当 x 接近于零时,sin(x)/ln(1+x) 甚至不接近与 x 相同的数字。我看不出意义在哪里消失了。

为了解决这个问题,我相信我需要对 sin(x) 和 ln(1+x) 使用泰勒展开,它们是

x - x^3/3! + x^5/5! - x^7/7! + ...

x - x^2/2 + x^3/3 - x^4/4 + ...

分别。我曾尝试使用相似的分母来组合 x 和 sin(x)/ln(1+x) 分量,甚至将这三个分量组合起来,但最终似乎没有任何效果。任何帮助表示赞赏。

4

6 回答 6

3

可能会出现精度损失,因为当x ~ 0,ln(1+x)也接近 0 时,您最终会除以一个非常小的数字。计算机在这方面不是很擅长;-)

如果你ln(1+x)直接使用泰勒级数,那会有点痛苦,因为你最终会被无穷多个项除。对于这样的情况,我通常更喜欢从定义中计算整个函数的泰勒级数:

f(x) = f(0) + f'(0) x + f''(0) x/2 + f'''(0) x/6 + ...

你会从中得到

f(x) = 2 + 3x/2 - x^2/4 - x^3/24 - x^4/240 - 23x^5/1440 + 31x^6/2880 ...

(我作弊并将其插入 Mathematica ;-) 就像史蒂夫所说,这个系列并没有很快收敛,尽管我现在想不出更好的方法。

编辑:我想我误读了这个问题——如果你想做的只是找到函数的零点,那么肯定有比使用泰勒级数更好的方法。

于 2009-02-12T20:51:51.933 回答
1

由于这是家庭作业,我只想尝试在正确的方向上给出一些指示。

解决方案 1

不要使用 Talyor 级数近似,而是尝试简单地使用求根算法,例如 Newton-Raphson 方法、线性插值或区间二分法(甚至将它们组合起来)。它们非常易于实现,并且有了适当地选择起始值,根可以很快收敛到精确的值。

解决方案 2

如果您出于某种原因确实需要使用泰勒级数近似,则只需扩展 sin(x)、ln(x) 和其他任何内容。(乘以 ln(x) 以删除您案例中的分母将起作用)。然后你需要使用某种多项式方程求解器。如果您想要合理的准确度,则需要超越我想象的 3 次或 4 次方,这意味着简单的分析解决方案并不容易。但是,您可能想要研究像Durand-Kerner 方法这样的方法来求解任意阶的一般多项式。不过,如果您需要使用高阶项,这种方法只会导致并发症,所以我肯定会推荐解决方案 1。

希望有帮助...

于 2009-02-12T20:47:25.470 回答
1

我认为您需要查看 ln(x+1) 在 x -->0 时会发生什么,您会明白为什么这个函数在 x = 0 附近表现不佳。

于 2009-02-12T20:50:04.433 回答
0

我没有仔细研究过这个,但你应该知道一些泰勒级数收敛得非常非常缓慢。

于 2009-02-12T20:40:15.317 回答
0

直接计算 f 的泰勒级数即可。

Maxima给了我(关于 x=0 的前 4 个术语):

(%i1) f(x):=1 + x - sin(x)/log(1+x);
                                           - sin(x)
(%o1)                     f(x) := 1 + x + ----------
                                          log(1 + x)


(%i2) taylor(f(x),x,0,4);
                                2    3    4
                           x   x    x    x
(%o2)/T/                   - + -- + -- + --- + . . .
                           2   4    24   240
于 2009-02-12T20:48:42.457 回答
0

所使用的方法是正确的 - 只要确保您的计算器处于弧度模式。

于 2010-03-15T18:24:01.290 回答