間隔を指定して関数のルートを取得するために、Python(組み込みのメソッドではない)の補間メソッドを使用しようとしています。
私は次のことをしましたが、どこが間違っているのかわかりません。二分法でそれを行いましたが、唯一の違いはテストポイントです。
x1とx2は区間の両端であり、fは関数であり、イプシロンは許容誤差です。
def interpolation (x1,x2,f,epsilon):
i = 1
n = 100
while i<n:
m = (f(x2)- f(x1))/(x2-x1)
b = f(x2) - m*(x2)
p = b
print (i,p,f(p))
if f(p) == 0 or b< epsilon:
print ('The root is at ',p,'after',i,'iterations')
break
i+= 1
if f(x1)*f(p) > 0: #Equal signs
x1 = p
else:
x2 = p
これをf=sin(x ^ 2)で実行すると、次のように振動する100回の反復が返されます。
コード
(80, 1.3266674970489443, 0.98214554271216425)
(81, 1.4900968376899661, 0.79633049173817871)
(82, 1.3266674970489443, 0.98214554271216425)
(83, 1.4900968376899661, 0.79633049173817871)