def f(x): return 3*x**3 - 12*x**2 def df(x, h=1e-6): return (f(x + h) - f(x)) / h def d2f(x, h=1e-6): return (df(x + h) - df(x)) / h def g(x): return x - f(x) * df(x) / (df(x)**2 - f(x) * d2f(x)) def newton_raphson(x0, tol=1e-12, max_iter=100): x_values = [] fx_values = [] dfx_values = [] d2fx_values = [] xi1_values = [] error_values = [] convergence_test = [] derivative_values = [] x_old = x0 iter_count = 0 while True: iter_count += 1 x_values.append(x_old) fx = f(x_old) fx_values.append(fx) dfx = df(x_old) dfx_values.append(dfx) d2fx = d2f(x_old) d2fx_values.append(d2fx) # Calculating xi+1 using the corrected Newton-Raphson iteration formula xi1 = x_old + f(x_old) / df(x_old) - f(x_old) * d2f(x_old) / (df(x_old)**2) xi1_values.append(xi1) # Calculating the error tolerance error = abs(xi1 - x_old) error_values.append(error) # Convergence test convergence = abs(f(x_old) * d2f(x_old) / (df(x_old)**2)) convergence_test.append(convergence) # Calculating g'(x) g_prime = abs(f(x_old) * d2f(x_old) / (df(x_old)**2)) # Appending derivative values to the list derivative_values.append(g_prime) if error < tol or iter_count >= max_iter: break x_old = xi1 return x_values, fx_values, dfx_values, d2fx_values, xi1_values, error_values, convergence_test, derivative_values if __name__ == "__main__": # Ingreso del valor inicial while True: x0 = float(input("Ingrese el valor inicial para x (positivo o negativo): ")) if x0 != 0: break print("El valor inicial no puede ser cero.") # Ejecución del método de Newton-Raphson x_values, fx_values, dfx_values, d2fx_values, xi1_values, error_values, convergence_test, derivative_values = newton_raphson(x0) # Impresión de la tabla print("Tabla de valores:") print("{:<10} {:<10} {:<10} {:<10} {:<10} {:<10} {:<10} {:<10}".format("X", "f(x)", "f'(x)", "f''(x)", "xi+1", "Error", "Prueba de convergencia", "Derivada de g(x)")) for i in range(len(x_values)): print("{:<10.6f} {:<10.6f} {:<10.6f} {:<10.6f} {:<10.6f} {:<10.6f} {:<10.6f} {:<10.6f}".format(x_values[i], fx_values[i], dfx_values[i], d2fx_values[i], xi1_values[i], error_values[i], convergence_test[i], derivative_values[i]))
fix invalid codeFri, 16 Feb 2024