我正在尝试用 python3 实现这个方法,但我没有解决问题。这是我的代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sympy
import numpy as np
x = sympy.symbols('x')
expr = x ** 2 - 2
fx = sympy.lambdify(x, expr, 'numpy')
def quad_inv(f, x0, x1, x2, tol, maxiter):
fx0 = f(x0)
fx1 = f(x1)
fx2 = f(x2)
x3 = None
iters = 0
error = tol + 1
if np.sign(tol) < 0:
raise ValueError('La tolerancia debe ser estrictamente positiva.')
while (error >= tol) & (iters <= maxiter):
a = fx1 * fx2 / ((fx0 - fx1) * (fx0 - fx2)) * x0
b = fx0 * fx2 / ((fx1 - fx0) * (fx1 - fx2)) * x1
c = fx0 * fx1 / ((fx2 - fx0) * (fx2 - fx1)) * x2
x3 = a + b + c
x0 = x1
x1 = x2
x2 = x3
error = abs((x3 - x0) * (x3 - x1) * (x3 - x2))
print(error)
iters += 1
return[x3, iters]
sol = quad_inv(fx, 1., 1.2, 1.6, 0.0001, 300)
print('La raíz aproximada con el Método Inversa Cuadrática es:\n{0}'.format(sol[0]))
print('Se han realizado un total de {0} iteraciones.'.format(sol[1]))
我只得到 1 次迭代。我没有找到任何关于这种方法的错误代码。
La raíz aproximada con el Método Inversa Cuadrática es:
1.4195804195804194
Se han realizado un total de 1 iteraciones.