Я программист начального уровня в Python. Я использую функцию odeint для решения системы обыкновенных дифференциальных уравнений. Я строю библиотеку структуры уравнений (словарь), которая содержит переменные (a, b, c), тригонометрические c функции (sin, cos, tan) и арифметические c операторы (+ и -), а затем позже пытаясь оптимизировать его с помощью алгоритма разведки роя. Я просто упоминаю ту часть кода, где я получаю сообщение об ошибке. Я посмотрел на некоторые из решенных вопросов той же ошибки, но не помог мне исправить мою ошибку, или, возможно, я не получаю решение именно для моей проблемы. Заранее спасибо
dictVar = {'a':0, 'b': 1, 'c': 2}
ops = { "+": operator.add, "-": operator.sub }
t_range = arange(0.0,60.0,1.0)
def odeFunc(Y, t,z, x,dictVar):
if x[-3] == 192:
temp1 = 191
else:
temp1 = int(x[-3])
if x[-2] == 192:
temp2 = 191
else:
temp2 = int(x[-2])
if x[-1] == 192:
temp3 = 191
else:
temp3 = int(x[-1])
modelOne = modelsOne[temp1]
modelTwo = modelsTwo[temp2]
modelThree = modelsThree[temp3]
return GenModel(Y, x,z, modelOne,modelTwo,modelThree, dictVar)
def GenModel(Y,x,z,modelOne,modelTwo,modelThree, dictVar):
dydt = zeros_like(Y)
dydt[0] = ops[modelOne[0]](dydt[0],x[0]*z[0]*Y[0])
dydt[0] = ops[modelOne[1]](dydt[0],x[1]*z[1]*Y[dictVar[modelOne[-3]]])
dydt[0] = ops[modelOne[2]](dydt[0],x[2]*z[2]*Y[dictVar[modelOne[-2]]]*Y[dictVar[modelOne[-1]]])
dydt[0] = ops[modelOne[3]](dydt[0],x[3]*z[3])
dydt[1] = ops[modelTwo[0]](dydt[1],x[4]*z[0]*Y[1])
dydt[1] = ops[modelTwo[1]](dydt[1],x[5]*z[1]*Y[dictVar[modelTwo[-3]]])
dydt[1] = ops[modelTwo[2]](dydt[1],x[6]*z[2]*Y[dictVar[modelTwo[-2]]]*Y[dictVar[modelTwo[-1]]])
dydt[1] = ops[modelTwo[3]](dydt[1],x[7]*z[3])
dydt[2] = ops[modelThree[0]](dydt[2],x[8]*z[0]*Y[2])
dydt[2] = ops[modelThree[1]](dydt[2],x[9]*z[1]*Y[dictVar[modelThree[-3]]])
dydt[2] = ops[modelThree[2]](dydt[2],x[10]*z[2]*Y[dictVar[modelThree[-2]]]*Y[dictVar[modelThree[-1]]])
dydt[2] = ops[modelThree[3]](dydt[2],x[11]*z[3])
return dydt
#Equations
def pendulum_equations(w, t):
T, I, V = w
dT = 80 - 0.15*T*sin(T) - 0.00002*T*V
dI = 0.00002*T*V - 0.55*I*cos(T)
dV = 900*0.55*I - 5.5*V - 0.00002*T*V*tan(V)
return dT, dI, dV
result_init = odeint(pendulum_equations, initial_condi, t_range)
# Calculating Sum of Square Error here
def myfunc(xRand):
result_new = odeint(odeFunc, initial_condi, t_range, args=(xRand,dictVar))
result_sub = result_new - result_init
return sum(result_sub*result_sub)
Ошибка, которую я получаю
TypeError: odeFunc() missing 1 required positional argument: 'dictVar'