我試圖解決分貝以下等式(爲簡單起見,我說分貝如問題標題X):解決對於x高度非線性方程在Python
所有的等式中的其他項是已知的。我嘗試使用SymPy來象徵性地解決dB問題,但我一直在獲取超時錯誤。我也嘗試使用scipy.optimize
中的fminbound
,但dB的答案是錯誤的(請參閱下面的Python代碼,使用fminbound
方法)。
有誰知道用Python解決dB公式的方法嗎?
import numpy as np
from scipy.optimize import fminbound
#------------------------------------------------------------------------------
# parameters
umf = 0.063 # minimum fluidization velocity, m/s
dbed = 0.055 # bed diameter, m
z0 = 0 # position bubbles are generated, m
z = 0.117 # bed vertical position, m
g = 9.81 # gravity, m/s^2
#------------------------------------------------------------------------------
# calculations
m = 3 # multiplier for Umf
u = m*umf # gas superficial velocity, m/s
abed = (np.pi*dbed**2)/4.0 # bed cross-sectional area, m^2
# calculate parameters used in equation
dbmax = 2.59*(g**-0.2)*(abed*(u-umf))**0.4
dbmin = 3.77*(u-umf)**2/g
c1 = 2.56*10**-2*((dbed/g)**0.5/umf)
c2 = (c1**2 + (4*dbmax)/dbed)**0.5
c3 = 0.25*dbed*(c1 + c2)**2
dbeq = 0.25*dbed*(-c1 + (c1**2 + 4*(dbmax/dbed))**0.5)**2
# general form of equation ... (term1)^power1 * (term2)^power2 = term3
power1 = 1 - c1/c2
power2 = 1 + c1/c2
term3 = np.exp(-0.3*(z - z0)/dbed)
def dB(d):
term1 = (np.sqrt(d) - np.sqrt(dbeq))/(np.sqrt(dbmin) - np.sqrt(dbeq))
term2 = (np.sqrt(d) + np.sqrt(c3))/(np.sqrt(dbmin) + np.sqrt(c3))
return term1**power1 * term2**power2 - term3
# solve main equation for dB
dbub = fminbound(dB, 0.01, dbed)
print 'dbub = ', dbub
聽起來像一個沃爾夫林阿爾法工作http://www.wolframalpha.com/input/?i=%28x+-+0.32%29^0.8*%28x+%2B+1.45%29^1.1+%3D+exp %280.8%29 – deinonychusaur
這是否有幫助(1d在scipy中的根發現):http://stackoverflow.com/questions/21720489/how-to-solve-an-1-parameter-equation-using-python-scipy-numpy/21726156#21726156 –
@alexandreiolov您在鏈接中指出的建議可能是正確的做法。你能發表更多細節的答案嗎? – wigging