# -*- coding: utf-8 -*-
"""
Created on Tue Jul 10 11:19:37 2018
@author: rodrigo.goncalves
"""
import pandas as pd
from scipy.optimize import minimize
# This is the IDF function, returning the sum of squared errors (SSE)
def func2(par, res):
p1 = (par[0] * res.index.values **par[1])
p2 = ((res.columns.values.astype(float)+par[2])**par[3])
f = pd.DataFrame([p/p2 for p in p1],index=res.index,columns=res.columns)
erroTotQ=((f-res)**2).sum(axis=1).sum()
return erroTotQ
# copy your rainfall intensities table from excel
# with column headers with rainfall durations
# and row names with Return period value in years
dfInt=pd.read_clipboard()
#initial guess
param1 = [5000, 0.1, 10, 0.9]
res2 = minimize(func2, param1, args=(dfInt,), method='Nelder-Mead')
print(res2)
cs=['K=','a=','b=','c=']
dfResult=pd.DataFrame(res2.x,index=cs).transpose()
print(dfResult)
dfResult.to_clipboard(index=None)
Python programming, with examples in hydraulic engineering and in hydrology.
Tuesday, July 10, 2018
Fitting IDF curves with Scipy and Pandas
Labels:
fitting idf curves,
idf,
minimize,
pandas,
precipitation,
rain,
rainfall,
scipy
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment