Examples¶
Both examples come from Section 6 of the paper “Fitting geometric programming models to data”, by W. Hoburg et. al.
Example 1¶
Fit convex portion of \(w = \frac{u^2 + 3}{(u+1)^2}\) on \(1 \leq u \leq 3\).
"Fits an example function"
from numpy import logspace, log, log10, random
from gpfit.fit import fit
random.seed(33404)
u = logspace(0, log10(3), 101)
w = (u**2 + 3)/(u + 1)**2
x = log(u)
y = log(w)
K = 3
cMA, errorMA = fit(x, y, K, "MA")
cSMA, errorSMA = fit(x, y, K, "SMA")
cISMA, errorISMA = fit(x, y, K, "ISMA")
print("MA RMS Error: %.5g" % errorMA)
print("SMA RMS Error: %.5g" % errorSMA)
print("ISMA RMS Error: %.5g" % errorISMA)
Output:
MA fit from params
w = 0.807159 * (u_1)**-0.0703921
w = 0.995106 * (u_1)**-0.431386
w = 0.92288 * (u_1)**-0.247099
SMA fit from params
w**3.4411 = 0.422736 * (u_1)**-2.14843
+ 0.424169 * (u_1)**-2.14784
+ 0.15339 * (u_1)**0.584654
ISMA fit from params
1 = (0.992648/w**0.35353) * (u_1)**-0.204093
+ (0.947302/w**0.0920266) * (u_1)**0.017725
+ (0.961409/w**0.11673) * (u_1)**-0.011164
MA RMS Error: 0.0023556
SMA RMS Error: 2.3856e-05
ISMA RMS Error: 8.0757e-07
Example 2¶
"Example 6.3 from Hoburg/Abbeel GPfit paper"
import numpy as np
from numpy.random import seed, random_sample
from gpfit.fit import fit
seed(33404)
Vdd = random_sample(1000) + 1
Vth = 0.2*random_sample(1000) + 0.2
P = Vdd**2 + 30*Vdd*np.exp(-(Vth - 0.06*Vdd)/0.039)
u = np.vstack((Vdd, Vth))
x = np.log(u)
y = np.log(P)
K = 4
_, errorMA = fit(x, y, K, "MA")
_, errorSMA = fit(x, y, K, "SMA")
_, errorISMA = fit(x, y, K, "ISMA")
print("MA RMS Error: %.5g" % errorMA)
print("SMA RMS Error: %.5g" % errorSMA)
print("ISMA RMS Error: %.5g" % errorISMA)
Output:
MA fit from params
w = 0.0877784 * (u_1)**2.3499 * (u_2)**-1.86683
w = 0.824389 * (u_1)**2.02321 * (u_2)**-0.203195
w = 0.0175649 * (u_1)**2.84017 * (u_2)**-2.78935
w = 0.38541 * (u_1)**2.13119 * (u_2)**-0.826143
SMA fit from params
w**2.22467 = 5.42035e-05 * (u_1)**5.24451 * (u_2)**-6.68343
+ 3.61239e-08 * (u_1)**9.613 * (u_2)**-9.4893
+ 1.07674e-05 * (u_1)**0.538839 * (u_2)**-6.12098
+ 1.0777 * (u_1)**4.43371 * (u_2)**0.0978425
ISMA fit from params
1 = (0.309986/w**0.309511) * (u_1)**0.6327 * (u_2)**-0.813931
+ (0.012176/w**0.67353) * (u_1)**2.61311 * (u_2)**-2.59033
+ (0.889774/w**0.242028) * (u_1)**0.485343 * (u_2)**-0.0942005
+ (1.00588/w**0.0753052) * (u_1)**0.149934 * (u_2)**0.0116639
MA RMS Error: 0.007382
SMA RMS Error: 0.00016261
ISMA RMS Error: 0.00017923