# -*- coding: utf-8 -*- """ Created on Mon Aug 5 17:37:48 2024 @author: Luz """ import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit # Datos de ejemplo x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 5, 4, 5]) y_error = np.array([0.2, 0.4, 0.3, 1, 0.3]) # Incertidumbres en y # Función lineal def linear_func(x, a, b): return a * x + b # Ajuste por mínimos cuadrados ponderado popt, pcov = curve_fit(linear_func, x, y, sigma=y_error, absolute_sigma=True) # Parámetros del ajuste slope, intercept = popt slope_err, intercept_err = np.sqrt(np.diag(pcov)) # Generar valores ajustados y_fit = linear_func(x, *popt) # Mostrar los resultados con incertidumbre print(f"Pendiente: {slope} ± {slope_err}") print(f"Intersección: {intercept} ± {intercept_err}") # Graficar los datos con barras de incertidumbre y la recta de ajuste plt.errorbar(x, y, yerr=y_error, fmt='o', label='Datos con incertidumbre') plt.plot(x, y_fit, color='red', label='Ajuste ponderado') # Insertar los valores del ajuste en la gráfica plt.text(3, 2, f'Pendiente = {slope:.2f} ± {slope_err:.2f}', fontsize=12, color='red') plt.text(3, 1.8, f'Intersección = {intercept:.2f} ± {intercept_err:.2f}', fontsize=12, color='red') plt.xlabel('X') plt.ylabel('Y') plt.legend() plt.title('Ajuste ponderado por mínimos cuadrados con barras de error') plt.show()