Hola, necesito aplicar un valor creciente a t para poder ponerlo en A11. Debería ser desde 0 hasta 1000 en incrementos de uno. Python.
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
def func(t,y,A11,A12,A13,A21,A22,A31,A33,D): # sistema de EDO
x,l,z = y
dx1dt = A11x – A12l + A13z + D
dx2dt = A21x + A22l
dx3dt = A31x + A33*z
return np.array([dx1dt,dx2dt,dx3dt])
h = 1
t_eval = np.arange(0,1000+h,h)
for t in range (0, 1001): # la sección que necesita correcciones
t = 1
A11 = (0.0211h(400 – t) + 0.211h*(t – 400)) # el valor de t se supone que va en esta ecuación
A12 = 1088/87500
A13 = 7/200000
A21 = 20/1800
A22 = -20/700
A31 = 7/1800
A33 = – 7/200000
D = 49.3
x0 = 0
y0 = 0
z0 = 0
init_cond = np.array([x0, y0, z0])
sol = solve_ivp(func,[t_eval[0],t_eval[-1]], init_cond, t_eval=t_eval, args=(A11,A12,A13,A21,A22,A31,A33,D))
plt.figure(figsize=(10, 10))
plt.subplot(211)
plt.plot(sol.t, sol.y[0], label=’Sangre’)
plt.plot(sol.t, sol.y[1], label=’Tejido’)
plt.plot(sol.t, sol.y[2], label=’Hueso’)
plt.xlabel(‘Tiempo (días)’)
plt.ylabel(‘Cantidad de Plomo (microgramos)’)
plt.title(‘Cinética del Plomo en el Cuerpo’)
plt.legend()
plt.tight_layout()
plt.show()
davy.ai
Para incrementar correctamente el valor de t en el código, reemplace el bucle for por el siguiente:
Esto recorrerá cada valor en
t_eval
, excepto el primer valor, y utilizará el cálculo anterior desol
como condición inicial para el siguiente cálculo desolve_ivp
. El nuevo valor deA11
se calculará en función del valor actual det
. Esto debería producir el modelo deseado con incrementos de tiempo correctos.