Cuando corro el codigo
import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # Initial conditions def f_func(eta,y_in): y_out = np.zeros(3) y_out[0] = y_in[1] y_out[1] = y_in[2] y_out[2] = -y_in[0]*y_in[2]/2 return y_out eta = np.linspace(0,8,100) X0 = [0,0,0.33206] X = odeint(f_func,X0,eta)
Me sale el error
'float' object has no attribute '__getitem__'
Cuando ejecuto el siguiente progtwig MATLAB, todo funciona bien. La función MATLAB ode45 es equivalente a la herramienta Pythons.
progtwig principal:
clear global beta beta = 1; initial_value = [0,0,1.2322]; eta = linspace(0,4,100) [x_out, y_out] = ode45(@falkner_skan,eta,initial_value); plot(x_out,y_out(:,2))
función falkner_skan:
function y_out = falkner_skan(x,y_in) global beta y_out(1,1) = y_in(2); y_out(2,1) = y_in(3); y_out(3,1) = -y_in(1)*y_in(3) - beta*(1-y_in(2)^2); end
Esto y esto y este hilo no parecen darme una guía.
Parece que y_in
no es una lista sino un valor flotante. El error aumenta porque está intentando obtener un elemento con obj[x]
de un objeto que no lo admite.
Mirando la documentación para odeint , dice que la función de entrada debería tomar dos argumentos, el primero es su objeto de datos y el segundo debe ser un flotante. Su implementación de f_func
es por lo tanto incorrecta.
NumPy tiene un objeto float 64 que tiene la función item (), np.float64 (10.5) .item ()