示例#1
0
def nsev_inverse_example2():
    """nsev_inverse_example: create a N=2.2 Satsuma-Yajima pulse from nonlinear spectrum."""
    D = 1024
    M = 2 * D
    Tmax = 15
    tvec = np.linspace(-Tmax, Tmax, D)
    # calculate suitable frequency bonds (xi)
    rv, xi = nsev_inverse_xi_wrapper(D, tvec[0], tvec[-1], M)
    xivec = xi[0] + np.arange(M) * (xi[1] - xi[0]) / (M - 1)

    # analytic field: chirp-free N=2.2 Satsuma-Yajima pulse
    q = 2.2 / np.cosh(tvec)

    # semi-analytic nonlinear spectrum
    bound_states = np.array([0.7j, 1.7j])
    disc_norming_const_ana = [1.0, -1.0]
    cont_b_ana = 0.587783 / np.cosh(xivec * np.pi) * np.exp(1.0j * np.pi)

    # call the function
    res = nsev_inverse(xivec, tvec, cont_b_ana, bound_states, disc_norming_const_ana, cst=1, dst=0)
    print("\n----- options used ----")
    print(res['options'])
    print("\n------ results --------")

    print("FNFT return value: %d (should be 0)" % res['return_value'])
    # compare result to analytic function
    print("nsev-inverse example: Satsuma-Yajima N=2.2")
    print("Difference analytic - numeric: sum((q_ana-q_num)**2) = %.2e  (should be approx 0) " % np.sum(
        np.abs(q - res['q']) ** 2))
    return res
示例#2
0
def nsev_inverse_example():
    """Mimics the C example for calling fnft_nsev_inverse."""
    print("\nnsev inverse example")

    # set values
    M = 2048
    D = 1024
    tvec = np.linspace(-2, 2, D)
    T1 = tvec[0]
    T2 = tvec[-1]
    alpha = 2.0
    beta = 0.55
    gamma = np.sqrt( np.abs(alpha)**2 + np.abs(beta)**2)
    kappa = 1

    # get the frequency intervall suited for the given time vector
    rv, XI = nsev_inverse_xi_wrapper(D, T1, T2, M)
    Xi1 = XI[0]
    Xi2 = XI[1]
    xivec = XI[0] + np.arange(M) * (XI[1] - XI[0]) / (M - 1)

    # set continuous spectrum
    contspec = alpha / (xivec - beta * 1.0j)

    # set discrete spectrum
    bound_states = np.array([1.0j * beta])
    normconst_or_residues = np.array([-1.0j * alpha / (gamma + beta)])

    # call function
    res = nsev_inverse(xivec, tvec, contspec, bound_states, normconst_or_residues)

    # print results
    print("\n----- options used ----")
    print(res['options'])
    print("\n------ results --------")
    print("FNFT return value: %d (should be 0)" % res['return_value'])
    print("Total number of samples calculated: %d" % D)
    print("some samples:")
    for i in range(0, D, 64):
        print("  %d : q(t=%.5f) = %.5e + %.5e j " % (i, tvec[i],
                                                     np.real(res['q'][i]),
                                                     np.imag(res['q'][i])))
    res['Xi'] = np.array([Xi1,Xi2])
    return res
示例#3
0
 def setUp(self):
     D = 512
     M = 2 * D
     Tmax = 15
     tvec = np.linspace(-Tmax, Tmax, D)
     rv, xi = nsev_inverse_xi_wrapper(D, tvec[0], tvec[-1], M)
     xivec = xi[0] + np.arange(M) * (xi[1] - xi[0]) / (M - 1)
     # semi-analytic nonlinear spectrum
     bound_states = np.array([0.7j, 1.7j])
     disc_norming_const_ana = [1.0, -1.0]
     cont_b_ana = 0.587783 / np.cosh(xivec * np.pi) * np.exp(1.0j * np.pi)
     self.xivec = xivec
     self.tvec = tvec
     self.cont_b_ana = cont_b_ana
     self.bound_states = bound_states
     self.disc_norming_const_ana = disc_norming_const_ana
     self.expected = {
         'qsamprange': [0, -1, 40],
         'q_both': np.array(
             [1.34282821e-06 + 5.90905693e-16j, 1.40927340e-05 + 6.69759843e-16j,
              1.47533087e-04 - 8.49415093e-16j, 1.54437857e-03 + 1.22641929e-16j,
              1.61660017e-02 + 2.70942564e-15j, 1.68966183e-01 + 9.95269660e-15j,
              1.52429449e+00 + 1.04462643e-14j, 9.88595941e-01 + 1.57705840e-14j,
              9.97145517e-02 + 6.45254951e-15j, 9.53104365e-03 + 1.87953249e-15j,
              9.10510486e-04 - 5.58634639e-16j, 8.69798167e-05 - 7.22303874e-16j,
              8.30772437e-06 + 9.63333629e-16j]),
         'q_disc': np.array(
             [5.09548061e-09 - 0.j, 1.36459139e-07 - 0.j, 3.65443384e-06 - 0.j,
              9.78673225e-05 - 0.j, 2.62101136e-03 - 0.j, 7.03972926e-02 - 0.j,
              1.69330859e+00 - 0.j, 9.18642908e-01 + 0.j, 3.35346003e-02 + 0.j,
              1.25083775e-03 + 0.j, 4.67066469e-05 + 0.j, 1.74405899e-06 + 0.j,
              6.51243941e-08 + 0.j]),
         'q_cont': np.array(
             [1.15243924e-07 - 6.57512209e-16j, 1.27802639e-06 + 7.04459178e-16j,
              1.34080356e-05 + 2.15209454e-16j, 1.40365068e-04 - 1.10360319e-15j,
              1.46934384e-03 + 4.21307084e-16j, 1.53587945e-02 + 2.81885851e-15j,
              1.38560954e-01 + 1.43110043e-14j, 8.98666443e-02 + 8.74350146e-15j,
              9.06369089e-03 + 2.14242869e-15j, 8.66276590e-04 - 1.04369988e-16j,
              8.27537156e-05 - 9.43644219e-16j, 7.90416963e-06 + 6.57722413e-16j,
              7.51076324e-07 + 6.32640626e-16j]),
         'q_none': np.array(
             [[0. + 0.j, 0. + 0.j, 0. + 0.j, 0. + 0.j, 0. + 0.j, 0. + 0.j, 0. + 0.j, 0. + 0.j, 0. + 0.j, 0. + 0.j,
               0. + 0.j, 0. + 0.j, 0. + 0.j]])}