【问题标题】:Curve Fitting to Exponential曲线拟合指数
【发布时间】:2016-02-13 05:04:39
【问题描述】:

我目前正在尝试在蒸汽压亏缺 (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)

这给了我 10.09132776 和 0.51489686 的 popt 和 pcov 值。但是,我在这里真正想做的是确定在 C 中的这些温度值下的 RH 值,这给了我 0.5 的 VPD 值。我可能会以错误的方式处理此问题,但我确实为此苦苦挣扎了很长时间,并且确实可以使用一些外部视角来了解如何执行此任务。

【问题讨论】:

  • 我认为你不需要把它弄得这么复杂,我认为你实际上并没有做你想做的事。我认为你应该结合方程式。由于您已经知道 VPD 和 C 的某些值,因此您只有 1 个未知数,然后可以使用求解器。 Python 确实没有最好的求解器,我更喜欢 Wolfram 但你可以使用 SymPy

标签: python scipy regression curve-fitting


【解决方案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 更改为 -(new VPD) 即可获得不同 VPD 的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2015-06-20
    • 2014-09-08
    • 2023-04-09
    • 2020-05-05
    • 1970-01-01
    • 2013-05-22
    相关资源
    最近更新 更多