программирование секущего метода с таблицей выходных данных для каждой итерации

#python #numerical-methods #numerical-analysis

Вопрос:

В настоящее время я изучаю численные методы в своем курсе численного анализа и хотел запрограммировать секущий метод для поиска корней уравнения на python

Я проверил разные источники для этого (например) и нашел действительно полезные коды для этого метода. у меня даже есть один собственный с выводом на заданную функцию.

 import numpy as np
def f(x):
  f = pow(x, 3) - pow(x,2)-1
  return f

def secant(x1, x2, E):
  n = 0
  xm = 0
  x0 = 0
  c = 0
  if (f(x1) * f(x2) < 0):
     while True:
        x0 = ((x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1)))
        c = f(x1) * f(x0)
        x1 = x2
        x2 = x0
        n  = 1
        if (c == 0):
            break
        xm = ((x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1)))
        if (np.abs((xm - x0)/x0) < E):
            break

    print("Root of the given equation =", np.round(x0, 6))
    print("No. of iterations = ", n)

else:
    print("Can not find a root in the given inteval")


x1 = 1
x2 = 2
E = 0.0001
secant(x1, x2, E)
 

затем я хотел создать такую таблицу для каждой итерации
(это для метода деления пополам, а не секущего).
введите описание изображения здесь
но мне не удалось этого сделать.

я был бы очень признателен, если бы кто-нибудь мог мне в этом помочь. даже намек был бы оценен по достоинству.

Комментарии:

1. Не могли бы вы сократить код метода до фактических строк секущего метода? Условия знака нет, за итерацию должна вычисляться только одна средняя точка, либо x0, либо xm, одна из них должна быть удалена. Проверка значения функции имеет сомнительную полезность, следует избегать сравнения с нулем.

2. Вы спрашиваете о заявлении о печати формы print(f"{n:2d} {x1:20.10f} {x2:20.10f}") и т. Д., Или вывод предназначен для включения в какую-либо другую разметку документа, такую как LaTeX?