如何使用给定间隔的牛顿法

我可以使用牛顿法通过从新的x值减去旧的x值并检查收敛准则来计算函数的根。在给定封闭时间间隔(例如

)时,有没有办法

给定一个函数,并且间隔[a,b] = [0.1,3.0],将通过检查[3.0-0.1] 我提供的代码是使用x值计算收敛准则的。我正在尝试找出是否有一种方法可以使用间隔而不是x值。

from math import *

x = 1.0 #initial value

for j in range(1,101):
    xnew = (x**2 + cos(x)**2 -4*x)/(2*(x - cos(x)*sin(x) -2))

    if abs(xnew - x) < 0.000001:
        break
    x = xnew

print('Root = %0.6f ' % xnew)
print('Number of iterations = %d' % j)
scscsc1980 回答:如何使用给定间隔的牛顿法

听起来您想保证在给定的间隔内找到了根(牛顿-拉夫森不能保证这一点)。您可以为此使用二等分。如果您知道函数在给定的间隔内更改符号(并且在同一间隔内是连续的),则类似于以下内容:

>>> from sympy.abc import x
>>> from sympy import nsolve
>>> ivl = 0,3
>>> expr = (x**2 + cos(x)**2 -4*x)
>>> nsolve(expr,x,ivl)
0.250324492526265

但是看起来您在使用NR方法尝试的过程中可能混入了一些变量。您正在计算的xnew看起来很像f(x)/f'(x)dx的{​​{1}}。因此,如果您写:

xnew = x - dx

你会得到

for j in range(1,101):
  dx = (x**2 + cos(x)**2 -4*x)/(2*(x - cos(x)*sin(x) -2))
  if abs(dx) < 0.000001:
    break
  x = x - dx

print('Root = %0.6f ' % x)
print('Number of iterations = %d' % j)
本文链接:https://www.f2er.com/3131271.html

大家都在问