我正在使用solve_ivp &推广的洛特卡-沃尔特拉方程来计算物种数量随时间的变化。在代码中,等式被分成两部分,如下所示:
species = ['fox','rabbits','deer']
t = np.linspace(0, 10, 50)
first_ABC = solve_ivp(ecoNetwork, (0, 10), X0, t_eval = t, args=(interactionStrength, growthRate), method = 'RK23')
def ecoNetwork(t, X, interactionStrength, growthRate):
# define new array to return
output_array = []
# loop through all the species
for outer_index, outer_species in enumerate(species):
# grab one set of growth rates at a time
amount = growthRate[outer_species] * X[outer_index]
for inner_index, inner_species in enumerate(species):
# grab one set of interaction matrices at a time
amount += (interactionStrength[outer_species][inner_species] * X[outer_index] * X[inner_index])
# append values to output_array
output_array.append(amount)
# return array
return output_array然而,代码的"amount +=“部分并没有像预期的那样工作,而且似乎没有将等式的第二部分加到第一部分。如果我将行改为一个新的变量名,它就会起作用,例如
amount2 = amount + (interactionStrength[outer_species][inner_species] * X[outer_index] * X[inner_index]) 有人能解释一下为什么+=不工作吗?
X0和growthRates都是pandas数据帧,交互矩阵的格式如下:
fox rabbit deer
fox 0.000000 -1 0.000000
rabbit 1 0.000000 0.000000
deer 0.000000 0.000000 0.000000 发布于 2020-10-08 00:30:01
Python变量存储对对象的引用,而不是它们的值。因此,要么需要使用另一个变量(如amount2),要么使用" copy“模块创建amount的浅层副本。(更干净的解决方案)
https://stackoverflow.com/questions/64248164
复制相似问题