指数曲线拟合

Curve Fitting to Exponential

我目前正在尝试在导致理想 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)

这为我提供了 10.09132776 和 0.51489686 的 popt 和 pcov 值。然而,我在这里真正想做的是确定这些温度值下的 RH 值,以 C 为单位,使我的 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 更改为 -(new VPD) 即可获得不同 VPD 的结果。