Я хочу решить нелинейную систему, используя root
от scipy. Я генерировал уравнения с помощью петель. Каждый раз, когда решатель выполняет итерации, чтобы найти решения, все циклы, которые генерируют уравнения, запускаются снова, что замедляет время решения. Я хочу создать код, который генерирует уравнения только один раз, а затем с помощью сгенерированных уравнений решить систему.
Например, следующий код находится в коде. Для каждой итерации он снова генерирует уравнения. Я хочу сгенерировать уравнения один раз, а затем решить систему с корнем, а не генерировать уравнение снова и снова на каждой итерации решателя.
def Colebrook(R,Re,d,f):
F = (-2.0*np.log10((R/(3.7*d) + (2.51/(Re*(np.sqrt(f)))))) - 1.0/(np.sqrt(f)))
return F
def ec(y):
if usar_darcy ==True:
for i in range(len(n)):
for a in range(len(n[i])):
for b in range(n[i][a]):
if y[Cont_col+Cont_cau]>=2000 and usar_darcy == True:
col = Colebrook(Rl,y[Cont_col+Cont_cau],Dl,
y[Cont_col + Cont_cau + Contador_re])
colebrook2.append(col)
if y[Cont_col+Cont_cau]<=2000 and usar_darcy == True:
col = Laminar2(y[Cont_col+Cont_cau],
y[Cont_col + Cont_cau + Contador_re])
colebrook2.append(col)
Cont_col = Cont_col + 1
return list_with_all_The_equations
def solver():
sol = root(ec, Guess,method='hybr', jac=False)
print(sol)
return sol
solver()