Я собираюсь использовать python (вместо excel) для задания в инженерном классе, не связанном с программированием.Я пытаюсь найти оптимальное количество трубок в теплообменнике для нескольких трубок разных размеров.Это число зависит от полдюжины связанных величин и имеет несколько ограничений.Немногие из этих уравнений являются линейными, но число пробирок должно быть положительным целым числом.Я знаю о пакете scipy.optimize и использовании math.ceil, чтобы превратить пробные числа в целые числа, но где-то должен быть более приятный пакет.
Я поместил код в таком виде здесь.
Ниже приведен раздел с проблемой оптимизации.Проблема в том, что fsolve недостаточно изменяется, чтобы изменить первоначальное предположение с помощью m.ceil.
def ntf():
fdn = 0.85 * 62.43
# lb/ft^3
vsb = fdn * 5 * (1.076 * 10 ** -5)
# lb/ft^3 * Cst * (ft^2/s) / Cst
kf = 0.08
fcp = 0.5
# Btu/ft^2-hr-(F/ft)
dua = uaf()
for i, x in enumerate(bwg16):
def func(nt):
nt = m.ceil(nt)
vel = velf(nt, x)
nre = nref(vel, bwg16[x][1], fdn, vsb)
npr = nprf(fcp, vsb, kf)
nnu = nnuf(nre, npr, vsb, vsb)
idc = idcf(nnu, bwg16[x][1], kf)
ohtc = ohtcf(idc, x)
fa = nt * bwg16[x][3]
sa = 40 * nt * bwg16[x][2]
ua = ohtc * sa
diff = ua - dua
return diff
nts[x] = opt.fsolve(func, 40, xtol = 0.01)
# TODO: Optimize nt such that diff is positive but as close to zero as
# possible. nt needs to be an integer. Then, I need to be able to
# extract nt, nre, vel, and sa into a dictionary to compare later. If
# all else fails, I suppose I could recalculate the rest later given
# the working nt.
return nts
Итак, можете ли вы порекомендовать лучший пакет или функцию в python, которая могла бы решить эту проблему?
Редактировать: я избавился от проблемы с типовой ошибкой, которая возникла из-за того, что я забыл некоторые операторы возврата.