Exemplo n.º 1
0
def bspline_integrate():
    import numpy as np
    import scipy.integrate as integrate
    from xspline.__init__ import bspline

    ok = True
    # setup test problem
    # -------------------------------------------------------------------------
    knots = np.linspace(0.0, 1.0, 3)
    degree = 1

    bs = bspline(knots, degree)

    # test integrate function
    # -------------------------------------------------------------------------
    N = 3
    x = np.linspace(-1.0, 2.0, N)
    a = np.repeat(-1.0, N)

    my_If = bs.splineIF(a, x, 0, 2)

    def func(x):
        return bs.splineIF(-1.0, x, 0, 1)

    tr_If = np.array([integrate.quad(func, a[i], x[i])[0] for i in range(N)])

    tol = 1e-8
    ok = ok and np.linalg.norm(my_If - tr_If) < tol

    if not ok:
        print('tr_If', tr_If)
        print('my_If', my_If)

    return ok
Exemplo n.º 2
0
def bspline_lastDMat():
    import numpy as np
    from xspline.__init__ import bspline

    ok = True
    # setup test problem
    # -------------------------------------------------------------------------
    knots = np.linspace(0.0, 1.0, 3)
    degree = 2

    bs = bspline(knots, degree)

    # test lastDMat function
    # -------------------------------------------------------------------------

    tr_df = np.array([
        [8.0, -12.0, 4.0, 0.0],
        [0.0, 4.0, -12.0, 8.0],
    ])

    my_df = bs.lastDMat()

    tol = 1e-10
    ok = ok and np.linalg.norm(my_df - tr_df) < tol

    if not ok:
        print('tr_df', tr_df)
        print('my_df', my_df)

    return ok
Exemplo n.º 3
0
def bspline_splineIF():
    import numpy as np
    from xspline.__init__ import bspline

    ok = True
    # setup test problem
    # -------------------------------------------------------------------------
    knots = np.linspace(0.0, 1.0, 3)
    degree = 1

    bs = bspline(knots, degree)

    # test splineIF function
    # -------------------------------------------------------------------------
    N = 101
    a = np.zeros(N)
    x = np.linspace(0.0, 1.0, N)
    lx = x[x < 0.5]
    rx = x[x >= 0.5]

    lzeros = np.zeros(lx.size)
    rzeros = np.zeros(rx.size)
    lones = np.ones(lx.size)
    rones = np.ones(rx.size)

    tr_if = np.vstack([
        np.hstack([lx - lx**2, 0.25*rones]),
        np.hstack([lx**2, (rx - 0.5) - (rx - 0.5)**2 + 0.25*rones]),
        np.hstack([lzeros, (rx - 0.5)**2])
        ])

    my_if = np.vstack([bs.splineIF(a, x, i, 1)
                       for i in range(bs.num_spline_bases)])

    tol = 1e-10
    ok = ok and np.linalg.norm(my_if - tr_if) < tol

    if not ok:
        print('tr_if', tr_if)
        print('my_if', my_if)

    return ok
Exemplo n.º 4
0
def bspline_designIMat():
    import numpy as np
    from xspline.__init__ import bspline

    ok = True
    # setup test problem
    # -------------------------------------------------------------------------
    knots = np.linspace(0.0, 1.0, 3)
    degree = 1

    bs = bspline(knots, degree)

    # test designIMat function
    # -------------------------------------------------------------------------
    N = 101
    a = np.zeros(N)
    x = np.linspace(0.0, 1.0, N)
    lx = x[x < 0.5]
    rx = x[x >= 0.5]

    lzeros = np.zeros(lx.size)
    rzeros = np.zeros(rx.size)
    lones = np.ones(lx.size)
    rones = np.ones(rx.size)

    tr_IX = np.vstack([
        np.hstack([lx - lx**2, 0.25 * rones]),
        np.hstack([lx**2, (rx - 0.5) - (rx - 0.5)**2 + 0.25 * rones]),
        np.hstack([lzeros, (rx - 0.5)**2])
    ]).T

    my_IF = bs.designIMat(a, x, 1)

    tol = 1e-10
    ok = ok and np.linalg.norm(my_IF - tr_IX) < tol

    if not ok:
        print('tr_IX', tr_IX)
        print('my_IF', my_IF)

    return ok
Exemplo n.º 5
0
def bspline_splineF():
    import numpy as np
    from xspline.__init__ import bspline

    ok = True
    # setup test problem
    # -------------------------------------------------------------------------
    knots = np.linspace(0.0, 1.0, 3)
    degree = 1

    bs = bspline(knots, degree)

    # test splineF function
    # -------------------------------------------------------------------------
    x = np.linspace(0.0, 1.0, 101)
    lx = x[x < 0.5]
    rx = x[x >= 0.5]

    lzeros = np.zeros(lx.size)
    rzeros = np.zeros(rx.size)
    lf1 = (lx - 0.5)/(0.0 - 0.5)
    lf2 = (lx - 0.0)/(0.5 - 0.0)
    rf1 = (rx - 1.0)/(0.5 - 1.0)
    rf2 = (rx - 0.5)/(1.0 - 0.5)

    tr_f = np.vstack([
        np.hstack([lf1, rzeros]),
        np.hstack([lf2, rf1]),
        np.hstack([lzeros, rf2])
        ])

    my_f = np.vstack([bs.splineF(x, i) for i in range(bs.num_spline_bases)])

    tol = 1e-10
    ok = ok and np.linalg.norm(my_f - tr_f) < tol

    if not ok:
        print('tr_f', tr_f)
        print('my_f', my_f)

    return ok
Exemplo n.º 6
0
def bspline_designMat():
    import numpy as np
    from xspline.__init__ import bspline

    ok = True
    # setup test problem
    # -------------------------------------------------------------------------
    knots = np.linspace(0.0, 1.0, 3)
    degree = 1

    bs = bspline(knots, degree)

    # test designMat function
    # -------------------------------------------------------------------------
    x = np.linspace(0.0, 1.0, 101)
    lx = x[x < 0.5]
    rx = x[x >= 0.5]

    lzeros = np.zeros(lx.size)
    rzeros = np.zeros(rx.size)
    lf1 = (lx - 0.5) / (0.0 - 0.5)
    lf2 = (lx - 0.0) / (0.5 - 0.0)
    rf1 = (rx - 1.0) / (0.5 - 1.0)
    rf2 = (rx - 0.5) / (1.0 - 0.5)

    tr_X = np.vstack([
        np.hstack([lf1, rzeros]),
        np.hstack([lf2, rf1]),
        np.hstack([lzeros, rf2])
    ]).T

    my_X = bs.designMat(x)

    tol = 1e-10
    ok = ok and np.linalg.norm(my_X - tr_X) < tol

    if not ok:
        print('tr_X', tr_X)
        print('my_X', my_X)

    return ok
Exemplo n.º 7
0
def bspline_splineDF():
    import numpy as np
    from xspline.__init__ import bspline

    ok = True
    # setup test problem
    # -------------------------------------------------------------------------
    knots = np.linspace(0.0, 1.0, 3)
    degree = 1

    bs = bspline(knots, degree)

    # test splineDF function
    # -------------------------------------------------------------------------
    x = np.linspace(0.0, 1.0, 101)
    lx = x[x < 0.5]
    rx = x[x >= 0.5]

    lzeros = np.zeros(lx.size)
    rzeros = np.zeros(rx.size)
    lones = np.ones(lx.size)
    rones = np.ones(rx.size)

    tr_df = np.vstack([
        np.hstack([-2.0 * lones, rzeros]),
        np.hstack([2.0 * lones, -2.0 * rones]),
        np.hstack([lzeros, 2.0 * rones])
    ])

    my_df = np.vstack(
        [bs.splineDF(x, i, 1) for i in range(bs.num_spline_bases)])

    tol = 1e-10
    ok = ok and np.linalg.norm(my_df - tr_df) < tol

    if not ok:
        print('tr_df', tr_df)
        print('my_df', my_df)

    return ok
Exemplo n.º 8
0
def bspline_designDMat():
    import numpy as np
    from xspline.__init__ import bspline

    ok = True
    # setup test problem
    # -------------------------------------------------------------------------
    knots = np.linspace(0.0, 1.0, 3)
    degree = 1

    bs = bspline(knots, degree)

    # test designDMat function
    # -------------------------------------------------------------------------
    x = np.linspace(0.0, 1.0, 101)
    lx = x[x < 0.5]
    rx = x[x >= 0.5]

    lzeros = np.zeros(lx.size)
    rzeros = np.zeros(rx.size)
    lones = np.ones(lx.size)
    rones = np.ones(rx.size)

    tr_DX = np.vstack([
        np.hstack([-2.0 * lones, rzeros]),
        np.hstack([2.0 * lones, -2.0 * rones]),
        np.hstack([lzeros, 2.0 * rones])
    ]).T

    my_DX = bs.designDMat(x, 1)

    tol = 1e-10
    ok = ok and np.linalg.norm(my_DX - tr_DX) < tol

    if not ok:
        print('tr_DX', tr_DX)
        print('my_DX', my_DX)

    return ok