2024-05-11 13:15:13 发布
网友
我对Python还不熟悉,如果下面的问题有一个“duh”的答案,请原谅我。在
所以,我尝试使用odeint来解决一个ODE,并希望传递一个数组。但是,TypeError:cannot multiply sequence by non int of type'float'不断出现在以下行中:
CA0 = (-kd-kn*Cv)*CAi/(1+(CAi/ks))
所以,代码是:
请帮忙?在
嗯,事实证明我还不能发布图像(stackoverflow新手)。所以,我用的密码是-
from scipy.integrate import odeint import numpy as np Ap_data = np.array([2, 7, 91, 1.6, 0.4, 5]) tdata= [0, 1, 4, 5, 4, 20] Cv_data = np.array([43, 580, 250, 34, 30, 3]) #Define parameters kn = 1E-5 #change ks = 1E+5 #change kd = 0.058 def deriv (CAi,t, Cv): CA0 = (-kd-kn*Cv)*CAi/(1+(CAi/ks)) return CA0 #Initial conditions CA_init = 21.6 #Solve the ODE (CAb_soln) = odeint (deriv, CA_init, tdata, (Cv_data,), full_output=True) print CAb_soln
您当前的问题是,deriv函数试图将普通Python list,Cv_data(作为Cv)乘以float值。如果要将此操作矢量化,请使用NumPy数组:
deriv
list
Cv_data
Cv
float
Ap_data = np.array([2, 7, 91, 1.6, 0.4, 5]) tdata= np.array([0, 1, 4, 5, 4, 20]) Cv_data = np.array([43, 580, 250, 34, 30, 3])
来解决这个问题。现在您遇到的问题是odeint对于您给它的输入失败。。。在
odeint
也许你可以提供更多关于你的方程是什么以及它与Cv_data之间关系的信息。特别是,你的导数不依赖于t,但是你有一个参数Cv的值范围。在
t
更新:它失败是因为你有趣的时间序列。odeint如果是单调的,则可以正常工作,例如:
from scipy.integrate import odeint import numpy as np Ap_data = [2, 7, 91, 1.6, 0.4, 5] tdata= np.array([0, 1, 4, 5, 10, 20]) Cv_data = np.array([43, 580, 250, 34, 30, 3]) #Define parameters kn = 1E-5 #change ks = 1E+5 #change kd = 0.058 def deriv (CAi,t, Cv): CA0 = (-kd-kn*Cv)*CAi/(1+(CAi/ks)) return CA0 #Initial conditions CA_init = 21.6 #Solve the ODE (CAb_soln) = odeint (deriv, CA_init, tdata, (Cv_data,)) print CAb_soln
结果是:
[[ 21.6 ] [ 20.37432613] [ 17.09897165] [ 16.12866355] [ 12.04306424] [ 6.71431758]]
嗯,事实证明我还不能发布图像(stackoverflow新手)。所以,我用的密码是-
您当前的问题是,
deriv
函数试图将普通Pythonlist
,Cv_data
(作为Cv
)乘以float
值。如果要将此操作矢量化,请使用NumPy数组:来解决这个问题。现在您遇到的问题是
^{pr2}$odeint
对于您给它的输入失败。。。在也许你可以提供更多关于你的方程是什么以及它与
Cv_data
之间关系的信息。特别是,你的导数不依赖于t
,但是你有一个参数Cv
的值范围。在更新:它失败是因为你有趣的时间序列。
odeint
如果是单调的,则可以正常工作,例如:结果是:
相关问题 更多 >
编程相关推荐