问题描述
我在 Jupiter 笔记本中使用 if else 语句来改变参数的值,然后在一系列微分方程中使用这些值。这是我目前的设置...
def epsilon1(t,V1,E_v1,I_v1,A_v1,R_v1,N1):
if t < 28:
return 0
if 29 < t < 84:
return 0.006 * N1 / (N1 - (V1 + E_v1 + I_v1 + A_v1 + R_v1))
if 85 < t < 105:
return 0.001 * N1 / (N1 - (V1 + E_v1 + I_v1 + A_v1 + R_v1))
if t > 104:
return 0
if V1 + E_v1 + I_v1 + A_v1 + R_v1 > 0.4 * N1:
return 0
然后我设置我的微分方程如下:
def deriv(y,t,N...
Lambda1 = beta11 * (I_s1 + delta_a * A_s1 + delta_v * delta_a * A_v1 + delta_v * I_v1 + delta_i * I_i1 + delta_a * delta_i * A_i1)/N1 + beta12 * (I_s2 + delta_a * A_s2 + delta_v * delta_a * A_v2 + delta_v * I_v2 + delta_i * I_i2 + delta_a * delta_i * A_i2)/N2 + beta13 * (I_s3 + delta_a * A_s3 + delta_v * delta_a * A_v3 + delta_v * I_v3 + delta_i * I_i3 + delta_a * delta_i * A_i3)/N3 + beta14 * (I_s4 + delta_a * A_s4 + delta_v * delta_a * A_v1 + delta_v * I_v4 + delta_i * I_i4 + delta_a * delta_i * A_i4)/N4
epsilon_current1 = epsilon1(t,N1)
dS1dt = - Lambda1 * S1 - epsilon_current1 * S1
这与我之前的代码相同,除了参数只有一个条件。现在我收到此错误代码...
--> 217 dS1dt = - Lambda1 * S1 - epsilon_current1 * S1
218 dS2dt = - Lambda2 * S2 - epsilon_current2 * S2
219 dS3dt = - Lambda3 * S3 - epsilon_current3 * S3
TypeError: unsupported operand type(s) for *: 'nonetype' and 'float'
epsilon2 和 epsilon3 的设置与 epsilon1 相同,只是值不同。
解决方法
就在函数的最顶部,您可以实施检查,例如:
Lambda1 = 1.0; S1 = 2.0; epsilon_current = None
if any(x is None for x in [Lambda1,S1,epsilon_current]):
print("There's something fishy about these variables,really.")
# some cool error handling here