我目前正在尝试在蒸气压不足(VPD)函数中找到可实现理想VPD的RH和TMP值。因此,我已经为VPD定义了函数,并尝试进行非线性回归,但没有获得所需的曲线。
import numpy as np
from scipy.optimize import curve_fit
def ES(C):
es = 0.6108*np.exp((17.27*C)/(C+273.3))
return es
def EA(RH,es):
ea = (float(RH)/100)*es
return ea
def VPD(C,RH):
es = ES(C)
ea = EA(RH,es)
vpd = ea
return vpd
C = np.linspace(0,50,100)
vpd = [0.5]*len(C)
popt, pcov = curve_fit(VPD, C, vpd)
这给了我popt和pcov的值10.09132776和0.51489686。但是,我在这里真正想做的是确定C中这些温度值下的RH值,从而使我的VPD值为0.5。我可能会以错误的方式进行此操作,但是我已经为此苦苦挣扎了很长时间,并且确实可以从外部角度了解如何执行此任务。
最佳答案
假设您的方程式是正确的,而我没有验证您可以这样做:
from sympy.solvers import solve
from sympy import Symbol
r = Symbol('r')
for C in np.linspace(0,50,100):
result = solve(((r/100)*(0.6108*np.exp((17.27*C)/(C+273.3))))-0.5, r )
print("For C = {} RH = {}".format(C, result[0]))
假设公式正确,这将为C的每个值打印RH。我简单地替换了方程,并将结果方程设置为等于0。只需将-0.5更改为-(新VPD)即可获得不同VPD的结果。
关于python - 曲线拟合到指数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33661857/