2015-11-11 2 views
1

В настоящее время я пытаюсь найти значения RH и TMP в функции для дефицита давления пара (VPD), которые приводят к идеальному 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 при этих значениях температуры в C, которые дают мне значения VPD 0,5. Возможно, я ошибаюсь, но я действительно долгое время боролся с этим и мог реально использовать некоторые внешние перспективы относительно того, как это сделать.

+0

Я не думаю, что вам нужно сделать это сложным, и я не думаю, что вы на самом деле делаете то, что хотите. Я думаю, вы должны объединить уравнения. Поскольку вы уже знаете VPD и некоторые значения C, у вас есть только 1 неизвестный, а затем можете использовать решатель. У Python действительно нет лучшего набора решателей для этого, я предпочитаю Wolfram, но вы можете использовать SymPy – klib

ответ

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])) 

Это напечатает RH для каждого значения C Если предположить, что уравнения являются правильными. Я просто заменил уравнения и установил результирующее уравнение равным 0. Просто измените -0.5 на - (новый VPD), чтобы получить результаты для другого VPD.

Смежные вопросы