逆二次方法只进行一次迭代 - python

计算科学 Python 麻木的
2021-12-07 01:45:54

我正在尝试用 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.
0个回答
没有发现任何回复~