LLJ_LLJ 发表于 2009-3-30 23:15:22

一元N次方程,先用牛顿迭代法解出1个根,然后应用因式分解,降次数成一元N-1次方程,
依此不断运用牛顿迭代法,不断降幂,就可解出所有的根,包括重根。

无心人 发表于 2009-3-31 07:56:32

楼上,实际情况很复杂

逐次降级很可能精度越来越低
直到结果完全错误

wayne 发表于 2009-3-31 12:25:04

用matlab整了一下。


>> f = @(x)10^log10(x)+x^log10(x)-20

f =

    @(x)10^log10(x)+x^log10(x)-20

>> vpa(bisection(f,0,1,1e-10),10)%二分法

ans =

.7245429227e-1


>> vpa(fzero(f,0.2),10)    % 自带的函数

ans =

.7245429225e-1


>>

LLJ_LLJ 发表于 2009-3-31 14:05:33

结果完全错误是不可能的,又不是比较两个数的大小。
如果怕精度不过,可以把解出的N个根,当作初始值,再运用牛顿迭代法分别重新解一下就可。
自己没有试过不要乱下判断。

gxqcn 发表于 2009-3-31 17:02:49

无心人 的意思是说,当误差累积到一定程度,结果就没有意义了。
当然你说的再次迭代可以看作是提升精度的一种方法。

无心人 发表于 2009-4-1 07:48:38

举个例子

100次方程有两个解1.0000000001E-8, 1.0000000002e-8
当逐次降解到10次时,解出的这两个解很可能成为0
而你用牛顿重新带入0,恐怕也不能迭代到这两个解
因为0到这两个数间也可能有其他解

无心人 发表于 2009-4-1 07:49:34

另外,有时候,牛顿迭代的初始解带入后会出现发散的情况
而不是收敛

wayne 发表于 2009-4-1 09:29:25

原帖由 LLJ_LLJ 于 2009-3-30 18:45 发表 http://bbs.emath.ac.cn/images/common/back.gif
是不是所有的一元N次方程,都可以用牛顿迭代法来解所有的N个根?
我试了一下,对于实数系数的一元N次方程,引进复数的计算方法,可以解出所有的N个复数根。 你是用什么语言写的程序?可否把程序发给我试试?

无心人 发表于 2009-4-1 10:03:42

如果是标准的牛顿迭代
可能存在精度问题

当然,用高精度浮点也许可以避免
但速速就慢了

而且工程中的方程,其规模是很大的
不是说10次8次的
很可能是上千变量几百次幂的方程组

所以避免精度损失是第一位的
否则,两个解当做重根的情况很可能发生
更惨的是离得很近的几十个解都当做重根了

无心人 发表于 2009-4-1 10:04:34

我觉得应该辅助以其他方法

这方面的资料我有本书
回家我去查查
页: 1 2 [3] 4 5
查看完整版本: 一道对数题