fork download
  1. import matplotlib.pyplot as plt
  2.  
  3. def secante_tabla(fx, xa, tolerancia):
  4. dx = 4 * tolerancia
  5. xb = xa + dx
  6. tramo = dx
  7. tabla = []
  8. while (tramo >= tolerancia):
  9. fa = fx(xa)
  10. fb = fx(xb)
  11. xc = xa - fa * (xb - xa) / (fb - fa)
  12. tramo = abs(xc - xa)
  13.  
  14. tabla.append([xa, xb, xc, tramo])
  15. xb = xa
  16. xa = xc
  17.  
  18. return tabla
  19.  
  20. a = 3.592
  21. b = 0.04267
  22. # L atm/mol k
  23. R = 0.082054
  24. p = 10
  25. xa = 1.5
  26. tolerancia = 0.001
  27. tramos = 100
  28.  
  29. # Temperatura predefinida
  30. T = 300 # Cambia este valor según la temperatura deseada
  31.  
  32. fx = lambda x: (p + a / x**2) * (x - b) - R * T
  33. dfx = lambda x: p - (a / x**2) + (2 * a * b / x**3)
  34. tabla = secante_tabla(fx, xa, tolerancia)
  35. n = len(tabla)
  36. raiz = tabla[n - 1][2]
  37. print('Raíz encontrada:', raiz)
  38.  
  39. # Visualización gráfica
  40. xi = [a + i * (b - a) / tramos for i in range(tramos + 1)]
  41. fi = [fx(x) for x in xi]
  42.  
  43. plt.plot(xi, fi, label='f(x)')
  44. plt.xlabel('x')
  45. plt.ylabel('f(x)')
  46. plt.title('Función f(x)')
  47. plt.grid()
  48.  
  49. # Marcamos los puntos de la secante
  50. xa_valores = [fila[0] for fila in tabla]
  51. xb_valores = [fila[1] for fila in tabla]
  52. xc_valores = [fila[2] for fila in tabla]
  53.  
  54. plt.plot(xa_valores, [fx(x) for x in xa_valores], 'go-', label='xa')
  55. plt.plot(xb_valores, [fx(x) for x in xb_valores], 'ro-', label='xb')
  56. plt.plot(xc_valores, [fx(x) for x in xc_valores], 'yo-', label='xc')
  57.  
  58. plt.legend()
  59. plt.show()
  60.  
Success #stdin #stdout 0.67s 55616KB
stdin
Standard input is empty
stdout
('Ra\xc3\xadz encontrada:', 2.3544955808627037)