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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #8
0
# 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')
Пример #9
0
# 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