-
Notifications
You must be signed in to change notification settings - Fork 24
/
curve_fit.py
96 lines (89 loc) · 2.49 KB
/
curve_fit.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
__author__ = 'kiruba'
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import itertools
from scipy.optimize import curve_fit
import math
dry_wb_file = '/media/kiruba/New Volume/ACCUWA_Data/Checkdam_water_balance/591/dry_wb_check.CSV'
dry_wb_df = pd.read_csv(dry_wb_file)
print dry_wb_df.head()
def fitfunc(h, alpha, beta):
return alpha*(h**beta)
def errfunc(alpha,beta , x, y):
return y - fitfunc(x,alpha, beta)
x = dry_wb_df['stage(m)']
y = dry_wb_df['infiltration(cu.m)']
p = [13.160, 0.969]
popt, pcov = curve_fit(fitfunc, x, y,p0=p)
print popt
error = errfunc(popt[0], popt[1], x, y)
print error
fig = plt.figure()
y_new = fitfunc(x,popt[0], popt[1])
plt.plot(x, y, 'bo')
plt.plot(x, y_new, 'r')
plt.errorbar(x, y_new,color='k', yerr=error)
plt.title("Stage vs Infiltration")
plt.xlabel("Stage(m)")
plt.ylabel("Infiltration (cu.m)")
plt.show()
log_x = np.log(x)
log_y = np.log(y)
print log_y
OK = log_y == log_y
masked_log_y = log_y[OK]
masked_log_x = log_x[OK]
pars = np.polyfit(masked_log_x, masked_log_y, 1)
print pars
fitted_y = np.polyval(pars,masked_log_x)
error_y = masked_log_y - fitted_y
fig = plt.figure()
plt.plot(masked_log_x, masked_log_y, 'bo')
plt.plot(masked_log_x, fitted_y, 'r-')
plt.errorbar(masked_log_x,fitted_y, yerr=error_y, marker='.', color='g')
plt.xlabel("ln(stage(m)")
plt.ylabel("ln(Infiltration (cu.m)")
plt.title("Log plot")
plt.show()
print pars[0]
print math.exp(pars[1])
print np.mean(error)
print " # Infiltration rate #"
x = dry_wb_df['stage(m)']
y = dry_wb_df['infiltration rate (m/day)']
p = [-0.1074, 0.011]
popt, pcov = curve_fit(fitfunc, x, y,p0=p)
print popt
error = errfunc(popt[0], popt[1], x, y)
print error
y_new = fitfunc(x,popt[0], popt[1])
fig = plt.figure()
plt.plot(x, y, 'bo')
# plt.plot(x, y_new, 'r')
plt.errorbar(x, y_new,color='k', yerr=error)
plt.title("Stage vs Infiltration rate")
plt.xlabel("Stage(m)")
plt.ylabel("Infiltration rate (m/day)")
plt.show()
log_x = np.log(x)
log_y = np.log(y)
print log_y
OK = log_y == log_y
masked_log_y = log_y[OK]
masked_log_x = log_x[OK]
pars = np.polyfit(masked_log_x, masked_log_y, 1)
print pars
fitted_y = np.polyval(pars,masked_log_x)
error_y = masked_log_y - fitted_y
fig = plt.figure()
plt.plot(masked_log_x, masked_log_y, 'bo')
plt.plot(masked_log_x, fitted_y, 'r-')
plt.errorbar(masked_log_x,fitted_y, yerr=error_y, marker='.', color='g')
plt.title("Log plot")
plt.xlabel("ln(Stage(m))")
plt.ylabel("ln(Infiltration rate(m/day))")
plt.show()
print pars[0]
print math.exp(pars[1])
print np.mean(error)