def fit_polynomial_one_constraint(X, Y, d, x0, y0): m = len(X) assert (len(Y) == m) A = matrix([[X**k] for k in xrange(d)]) G = matrix(0.0, (2, d)) G[0, range(d)] = matrix([[x0**k] for k in xrange(d)]) G[1, range(1, d)] = matrix([[k * x0**(k - 1)] for k in xrange(1, d)]) # LS fit # # minimize (1/2) * || A*x - Y ||_2^2 # subject to G*x = h # # Solve as a linear equation # # [ A'*A G' ] [ x ] [ A'*Y ] # [ G 0 ] [ Y ] = [ 0 ]. K = matrix(0.0, (d + 2, d + 2)) K[:d, :d] = A.T * A K[d:, :d] = G xls = matrix(0.0, (d + 2, 1)) xls[:d] = A.T * Y xls[d] = y0 lapack.sysv(K, xls) xls = xls[:d] return xls
def fit_polynomial_one_constraint(X, Y, d, x0, y0): m = len(X) assert(len(Y) == m) A = matrix( [[X**k] for k in xrange(d)]) G = matrix(0.0, (2,d)) G[0, range(d)] = matrix([[x0**k] for k in xrange(d)]) G[1, range(1,d)] = matrix([[k*x0**(k-1)] for k in xrange(1,d)]) # LS fit # # minimize (1/2) * || A*x - Y ||_2^2 # subject to G*x = h # # Solve as a linear equation # # [ A'*A G' ] [ x ] [ A'*Y ] # [ G 0 ] [ Y ] = [ 0 ]. K = matrix(0.0, (d+2,d+2)) K[:d,:d] = A.T * A K[d:,:d] = G xls = matrix(0.0, (d+2,1)) xls[:d] = A.T * Y xls[d] = y0 lapack.sysv(K, xls) xls = xls[:d] return xls
def old_fit_polynomial_multiple_constraints(X, Y, d, x0, y0): m = len(X) assert (len(Y) == m) A = matrix([[X**k] for k in xrange(d)]) ncst = len(x0) assert (ncst == len(y0)) G = matrix(0.0, (2 * ncst, d)) for ii in xrange(ncst): G[2 * ii + 0, range(d)] = matrix([[x0[ii]**k] for k in xrange(d)]) G[2 * ii + 1, range(1, d)] = matrix([[k * x0[ii]**(k - 1)] for k in xrange(1, d)]) # LS fit # # minimize (1/2) * || A*x - Y ||_2^2 # subject to G*x = h # # Solve as a linear equation # # [ A'*A G' ] [ x ] [ A'*Y ] # [ G 0 ] [ Y ] = [ 0 ]. K = matrix(0.0, (d + 2 * ncst, d + 2 * ncst)) K[:d, :d] = A.T * A K[d:, :d] = G xls = matrix(0.0, (d + 2 * ncst, 1)) xls[:d] = A.T * Y for ii in xrange(ncst): xls[d + ii * 2] = y0[ii] lapack.sysv(K, xls) xls = xls[:d] return xls
def old_fit_polynomial_multiple_constraints(X, Y, d, x0, y0): m = len(X) assert(len(Y) == m) A = matrix( [[X**k] for k in xrange(d)]) ncst = len(x0) assert( ncst == len(y0)) G = matrix(0.0, (2*ncst,d)) for ii in xrange(ncst) : G[2*ii+0, range(d)] = matrix([[x0[ii]**k] for k in xrange(d)]) G[2*ii+1, range(1,d)] = matrix([[k*x0[ii]**(k-1)] for k in xrange(1,d)]) # LS fit # # minimize (1/2) * || A*x - Y ||_2^2 # subject to G*x = h # # Solve as a linear equation # # [ A'*A G' ] [ x ] [ A'*Y ] # [ G 0 ] [ Y ] = [ 0 ]. K = matrix(0.0, (d+2*ncst,d+2*ncst)) K[:d,:d] = A.T * A K[d:,:d] = G xls = matrix(0.0, (d+2*ncst,1)) xls[:d] = A.T * Y for ii in xrange( ncst ) : xls[d+ii*2] = y0[ii] lapack.sysv(K, xls) xls = xls[:d] return xls
def lapack_sysv(a, b): """ Inverse using LaPaCK sysv algorithm. :param a: :param b: :return: """ b_sysv = matrix(b) lapack.sysv(matrix(a), b_sysv) return b_sysv
def fit_polynomial_multiple_constraints(X, Y, d, x0, y0, x1=None, y1=None): m = len(X) assert (len(Y) == m) A = matrix([[X**k] for k in xrange(d)]) ncst0 = len(x0) assert (ncst0 == len(y0)) ncst1 = 0 if x1: ncst1 = len(x1) G = matrix(0.0, (2 * ncst0 + ncst1, d)) for ii in xrange(ncst0): G[2 * ii + 0, range(d)] = matrix([[x0[ii]**k] for k in xrange(d)]) G[2 * ii + 1, range(1, d)] = matrix([[k * x0[ii]**(k - 1)] for k in xrange(1, d)]) if x1: for ii in xrange(ncst1): G[ii + 2 * ncst0, range(d)] = matrix([[x1[ii]**k] for k in xrange(d)]) # LS fit # # minimize (1/2) * || A*x - Y ||_2^2 # subject to G*x = h # # Solve as a linear equation # # [ A'*A G' ] [ x ] [ A'*Y ] # [ G 0 ] [ Y ] = [ 0 ]. K = matrix(0.0, (d + 2 * ncst0 + ncst1, d + 2 * ncst0 + ncst1)) K[:d, :d] = A.T * A K[d:, :d] = G xls = matrix(0.0, (d + 2 * ncst0 + ncst1, 1)) xls[:d] = A.T * Y for ii in xrange(ncst0): xls[d + ii * 2] = y0[ii] if x1: for ii in xrange(ncst1): xls[d + 2 * ncst0 + ii] = y1[ii] lapack.sysv(K, xls) xls = xls[:d] coefs = numpy.array(xls.T)[0] coefs = coefs[::-1] return coefs
def fit_polynomial_multiple_constraints(X, Y, d, x0, y0, x1 = None, y1 = None): m = len(X) assert(len(Y) == m) A = matrix( [[X**k] for k in xrange(d)]) ncst0 = len(x0) assert( ncst0 == len(y0)) ncst1 = 0 if x1 : ncst1 = len(x1) G = matrix(0.0, (2*ncst0+ncst1,d)) for ii in xrange(ncst0) : G[2*ii+0, range(d)] = matrix([[x0[ii]**k] for k in xrange(d)]) G[2*ii+1, range(1,d)] = matrix([[k*x0[ii]**(k-1)] for k in xrange(1,d)]) if x1 : for ii in xrange(ncst1) : G[ii+2*ncst0,range(d)] = matrix( [[x1[ii]**k] for k in xrange(d)] ) # LS fit # # minimize (1/2) * || A*x - Y ||_2^2 # subject to G*x = h # # Solve as a linear equation # # [ A'*A G' ] [ x ] [ A'*Y ] # [ G 0 ] [ Y ] = [ 0 ]. K = matrix(0.0, (d+2*ncst0+ncst1,d+2*ncst0+ncst1)) K[:d,:d] = A.T * A K[d:,:d] = G xls = matrix(0.0, (d+2*ncst0+ncst1,1)) xls[:d] = A.T * Y for ii in xrange( ncst0 ) : xls[d+ii*2] = y0[ii] if x1 : for ii in xrange( ncst1 ) : xls[d+2*ncst0+ii] = y1[ii] lapack.sysv(K, xls) xls = xls[:d] coefs = numpy.array(xls.T)[0] coefs = coefs[::-1] return coefs
# LS fit # # minimize (1/2) * || A*x - y ||_2^2 # subject to G*x = h # # Solve as a linear equation # # [ A'*A G' ] [ x ] [ A'*y ] # [ G 0 ] [ y ] = [ 0 ]. K = matrix(0.0, (n + 6, n + 6)) K[:n, :n] = A.T * A K[n:, :n] = G xls = matrix(0.0, (n + 6, 1)) xls[:n] = A.T * y lapack.sysv(K, xls) xls = xls[:n] # Chebyshev fit # # minimize || A*x - y ||_inf # subject to G*x = h xcheb = variable(12) op(max(abs(A * xcheb - y)), [G * xcheb == 0]).solve() xcheb = xcheb.value if pylab_installed: pylab.figure(2, facecolor='w') nopts = 100 ts = -1.0 + (1.0 - (-1.0)) / nopts * matrix(list(range(nopts)), tc='d')
# LS fit # # minimize (1/2) * || A*x - y ||_2^2 # subject to G*x = h # # Solve as a linear equation # # [ A'*A G' ] [ x ] [ A'*y ] # [ G 0 ] [ y ] = [ 0 ]. K = matrix(0.0, (n+6,n+6)) K[:n,:n] = A.T * A K[n:,:n] = G xls = matrix(0.0, (n+6,1)) xls[:n] = A.T * y lapack.sysv(K, xls) xls = xls[:n] # Chebyshev fit # # minimize || A*x - y ||_inf # subject to G*x = h xcheb = variable(12) op( max(abs(A*xcheb - y)), [G*xcheb == 0]).solve() xcheb = xcheb.value if pylab_installed: pylab.figure(2, facecolor='w') nopts = 100