曲线拟合为指数

时间:2015-11-11 23:33:35

标签: python scipy regression curve-fitting

我目前正在尝试在蒸汽压力不足(VPD)函数中找到RH和TMP的值,从而产生理想的VPD。所以我已经为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。但是,我真正想要做的是确定在这些温度值下RH的值,它给出的VPD值为0.5。我可能会以错误的方式解决这个问题,但是我很长时间以来一直在努力解决这个问题,并且可以使用一些外部视角来讨论如何完成这项任务。

1 个答案:

答案 0 :(得分:1)

假设你的方程是正确的,我没有验证你可以简单地这样做:

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的结果。