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
我觉得应该辅助以其他方法
这方面的资料我有本书
回家我去查查