Пример #1
0
def check_kdmd_computation_simple(exact, total):
    """ Check DMD computations on a problem where the 
        true solution is known.  All variants of DMD
        should identify the original eigenvalues
    """

    num_snapshots = 50

    A = np.array([[0.9, 0.1], [0.0, 0.8]])
    X = np.random.randn(2, num_snapshots)
    Y = A.dot(X)

    ADMD = Y.dot(np.linalg.pinv(X))
    vals, vecs = np.linalg.eig(ADMD)
    inds = np.argsort(np.abs(vals))[::-1]
    vals = vals[inds]
    vecs = vecs[:, inds]

    # DMD class with rank 2
    poly = dmdtools.PolyKernel(5)
    KDMD = dmdtools.KDMD(poly, None, exact, total)
    KDMD.fit(X, Y)

    for ii in range(len(vals)):
        dmd_vals, dmd_modes = dmdtools.sort_modes_evals(KDMD, sortby="closest",
                                                   target=vals[ii])
        assert np.abs(dmd_vals[0] - vals[ii]) < 1e-10
        check_eigenvectors(vecs[:, ii], dmd_modes[:, 0])
Пример #2
0
def check_dmd_computation_simple_timeseries(exact, total):
    """ Check DMD computations on a problem where the 
        true solution is known.  All variants of DMD
        should give identical outputs.
    """

    num_snapshots = 10

    A = np.array([[0.9, 0.1], [0.0, 0.8]])
    # Create a time series of data
    data = np.zeros((2, num_snapshots + 1))
    data[:, 0] = np.random.randn(2)

    for ii in range(num_snapshots):
        data[:, ii + 1] = A.dot(data[:, ii])

    X = data[:, :-1]
    Y = data[:, 1:]
    ADMD = Y.dot(np.linalg.pinv(X))
    vals, vecs = np.linalg.eig(ADMD)
    inds = np.argsort(np.abs(vals))[::-1]
    vals = vals[inds]
    vecs = vecs[:, inds]

    # DMD class with rank 2
    DMD = dmdtools.DMD(2, exact, total)
    DMD.fit(data)
    dmd_vals, dmd_modes = dmdtools.sort_modes_evals(DMD)

    for ii in range(len(vals)):
        assert np.abs(dmd_vals[ii] - vals[ii]) < 1e-10
        check_eigenvectors(vecs[:, ii], dmd_modes[:, ii])
Пример #3
0
def check_dmd_computation_simple_timeseries(exact, total):
    """ Check DMD computations on a problem where the 
        true solution is known.  All variants of DMD
        should give identical outputs.
    """

    num_snapshots = 10

    A = np.array([[0.9, 0.1], [0.0, 0.8]])
    # Create a time series of data
    data = np.zeros((2, num_snapshots+1))
    data[:, 0] = np.random.randn(2)

    for ii in range(num_snapshots):
        data[:, ii + 1] = A.dot(data[:, ii])

    X = data[:, :-1]
    Y = data[:, 1:]
    ADMD = Y.dot(np.linalg.pinv(X))
    vals, vecs = np.linalg.eig(ADMD)
    inds = np.argsort(np.abs(vals))[::-1]
    vals = vals[inds]
    vecs = vecs[:, inds]

    # DMD class with rank 2
    DMD = dmdtools.DMD(2, exact, total)
    DMD.fit(data)
    dmd_vals, dmd_modes = dmdtools.sort_modes_evals(DMD)

    for ii in range(len(vals)):
        assert np.abs(dmd_vals[ii] - vals[ii]) < 1e-10
        check_eigenvectors(vecs[:, ii], dmd_modes[:, ii])