dousha99 发表于 2018-2-18 21:13:20

关于 HP 50g 极限计算的 Bug 的一些考察和解决方法

原帖(万年老坟,请勿挖坟!):http://tieba.baidu.com/p/2189630287
论坛原帖(万年老坟):https://www.cncalc.org/forum.php?mod=viewthread&tid=8343

计算 \( \lim{x \to 0}{\frac{cos(x)-exp(-x^2/2)}{x^4}} \) 时,HP 50g 返回了错误的答案。(我们将极限内的算式记做 f(x), 下文使用。)
在原帖中,返回的是无法计算的 ?. 在最新版本 (2.15) 中,则返回了 -3/8, 与正确答案 -1/12 相去甚远。

在计算过程中,计算器提示 SERIES remainder is O(1) at order 3
这表明进行序列展开时,第 3 阶展开是无穷小项。

可以推断,在 HP 50g 进行极限求解的时候,会对原算式进行泰勒展开并计算。但可能由于泰勒展开的代码存在漏洞,导致展开结果错误,进而导致极限计算结果错误。

Google 一番后,发现隔壁 HP Museum 也提出了 50g 极限的 Bug
原帖(请遵守论坛规范):http://www.hpmuseum.org/forum/thread-7812.html

计算 \( \lim{x \to 0}{\frac{cos(x)-1+(\frac{1}{2})*x^2}{x^4}} \) 时答案错误,返回 ?, 而正确答案为 1/24.

后面发现答案:为了加速运算或其他原因,lim 函数使用的展开阶数很低(通常小于 4 阶)。而要计算这些函数的极限,必须使用 4 阶以上展开。

解决方案是使用 SERIES 函数而不使用 lim 函数:
算式放在第 3 层、X=0 放在第 2 层、第 1 层写展开阶数执行 SERIES 函数,则会产生 2: {:Limit:(答案) :Equiv:... ... :Remain: '(余项)'} 和 1: h=X. 其中,Limit 即为函数在 X=0 处的极限,为正确答案。

使用 f(x) 进行测试,X F X 0 = 5 SERIES (线性表达式同等 SERIES(F(X), X=0, 5), 表示于 X=0 处进行 5 阶泰勒展开)得到的结果为:
2: { :Limit: '-1/12' :Equiv: '-1/12' :Expans: '-1/12' :Remain: 'h^2' }
1: h=X
取得正确答案。

至此,HP 50g 极限计算的 Bug 已经展现,解决方案如上。HP 50g 并不是无法计算简单的极限,只是有些时候自作聪明,聪明反被聪明误。
页: [1]
查看完整版本: 关于 HP 50g 极限计算的 Bug 的一些考察和解决方法