# Import of packages: import numpy as np import matplotlib.pyplot as plt # Def of objective function: def fun_f(x, params): L = params[0] D = params[1] x_rad = x*np.pi/180 V = (D*L**2*np.cos(x_rad)*np.sin(x_rad)) f = -V return f # Model params: L = 4 # [m] D = 5 # [m] params = [L, D] # Defining value range of optim variable: x_lb = 0 # [deg] x_ub = 90 # [deg] N_x = 1000 x_array = np.linspace(x_lb, x_ub, N_x) # Initialization: f_min = np.inf x_opt = 0 # Strictly not necessary to define here # Grid method of optimization: for x in x_array: f = fun_f(x, params) if (f < f_min): # Improvement of solution f_min = f # Updating objective function x_opt = x # Updating optimal solution V_max = -f_min # Presenting results: print('x_opt =', f'{x_opt:.1f}') print('f_min =', f'{f_min:.1f}') print('V_max =', f'{V_max:.1f}')