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