我目前正在尝试在蒸气压不足(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/

10-12 20:07