Cómo utilizar scipy.optimize.minimize para una función con 3 variables?
Estoy tratando de optimizar esta función:
def voce(strain, sigma_s, sigma_y, epsilon_0):
stress = sigma_s - (sigma_s - sigma_y)*np.exp(-strain/epsilon_0)
return stress
encontrando los mejores valores para sigmas, sigmay y epsilon_0. Tanto Strain como stress deberían ser matrices unidimensionales de numpy.
He intentado:
initial_guess = [1, 1, 1]
result = minimize(voce, initial_guess)
pero obtengo “ValueError: can only convert an array of size 1 to a Python scalar”.
Estoy un poco confundido sobre cómo utilizar minimize en esto.
davy.ai
El error sugiere que la entrada
a la función
minimize
puede no estar en el formato correcto.Cuando se utiliza
minimize
, se debe proporcionar una suposición para las variables como argumento. Esta suposición debe ser un arreglo numpy unidimensional, sin embargo, parece que la suposición inicial proporcionada es solo una lista con 3 valores.Para corregir este error, la suposición inicial debe convertirse en un arreglo numpy utilizando
np.array()
:Luego, la función
minimize
debe ser llamada con el parámetroargs
para especificar los valores destrain
ysigma_y
:Aquí,
strain
,sigma_y
yepsilon_0
deben ser arreglos numpy con los valores apropiados.Una vez que la función
minimize
se ejecute correctamente, los valores óptimos desigma_s
,sigma_y
yepsilon_0
se pueden obtener de la variableresultado
:Estos valores luego se pueden utilizar en la función
voce
para calcular los valores de estrés optimizados para el arreglo de deformación dado.