import numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt
# Example data
x = np.array([1, 2, 3, 4, 5])
y = np.array([3.5, 4.6, 6.8, 9.9, 10.7])
# Define the objective function
def objective_function(params):
a, b = params
residuals = y - (a * x + b)
return np.sum(residuals ** 2)
# Define the non-negativity constraints
constraints = ({'type': 'ineq', 'fun': lambda a: a},
{'type': 'ineq', 'fun': lambda b: b})
# Initial guess for parameters
initial_guess = np.array([1.0, 1.0])
# Perform optimization
result = minimize(objective_function, initial_guess, constraints=constraints)
# Extract optimized values
optimal_a, optimal_b = result.x
# Evaluate the optimized coefficients
print("Optimal a:", optimal_a)
print("Optimal b:", optimal_b)
plt.plot(x, y, '+', label='data')
plt.plot(x, optimal_a*x+optimal_b, label='y=ax+b')
plt.xlabel('x')
plt.ylabel('y')
plt.title('from scipy.optimize import minimize')
plt.legend()
plt.grid()
plt.show()