def plot_time_evolve_step_error(Ns, step, dts, log_scale=True):
    fig, ax = plt.subplots(figsize=(8, 4))
    if log_scale: ax.set_yscale("log")
    for i, N in enumerate(Ns):
        n = 70
        for j, dt in enumerate(dts):
            l, v = get_eig(N, V, 1)
            v = v[:, 0]
            A = step(N, V, dt)
            a = np.empty(n, dtype=np.complex128)
            a[0] = inner(v, v)
            for k in range(1, n):
                v = A @ v
                a[k] = inner(v, v)

            ax.plot(np.arange(n),
                    a,
                    label="$\Delta t / \Delta x^2={:.4f}$".format(dt * N**2),
                    color=cm.viridis((i * 2 + j) / 4))

    ax.set_xlabel("number of steps")
    ax.set_ylabel("$\\langle \psi_n | \psi_n \\rangle $")
    ax.legend()
    plt.tight_layout()
    name = FIG_PATH + "step_error"
    if log_scale: name += "log"
    plt.savefig(name + ".pdf")
def plot_eigvals(N, nev):
    l, v = get_eig(N, V, nev)
    n = np.arange(nev) + 1

    fig, ax = plt.subplots(figsize=(8, 4))
    ax.plot(n, l, "o")
    ax.set_xlabel("$n$")
    ax.set_ylabel("$E / [2mL/\hbar^2]$")
    plt.tight_layout()
    plt.savefig(FIG_PATH + "eigenvals.pdf")
Exemplo n.º 3
0
def plot_diff_vals(N, Vrs):
    n = len(Vrs)
    diff1 = []
    diff2 = []
    l0, v0 = get_eig(N, lambda x: V(x, 0, V0), 2)
    for i in range(n):
        Vr = Vrs[i]

        l1, _ = get_eig(N, lambda x: V(x, Vr), 2)

        H_eff = get_H_eff(N, l0, v0, V, Vr)
        l2, _ = eig(H_eff)

        diff1.append(l1[1] - l1[0])
        diff2.append(l2[1] - l2[0])

    fig, ax = plt.subplots()
    ax.plot(Vrs, diff1, label="full system")
    ax.plot(Vrs, diff2, label="effective system")
    ax.legend()
    ax.set_ylabel("$\Delta E/ [2mL/\hbar^2]$")
    ax.set_xlabel("$V_r/ [2mL/\hbar^2]$")
    plt.show()
Exemplo n.º 4
0
def plot_H_eff_vecs(N, Vrs):
    n = len(Vrs)
    fig, ax = plt.subplots(2)
    for i in range(n):
        Vr = Vrs[i]
        H_eff = get_H_eff(N, V, Vr)
        l, v = eig(H_eff)
        indx = np.argsort(l)
        v = v[:, indx]
        l, v2 = get_eig(N, lambda x:V(x, Vr), 2)
        x = get_x(N)

        ax[0].plot([0.25, 0.75], abs(v[:, 0])**2, "kx")
        ax2 = ax[0].twinx()
        ax2.plot(x, abs(v2[:, 0])**2, color=color(i, n))
        ax[1].plot([0.25, 0.75], abs(v[:, 1])**2, "kx")
        ax3 = ax[1].twinx()
        ax3.plot(x, abs(v2[:, 1])**2, color=color(i, n))

    plt.show()
def plot_superpos(N):
    l, v = get_eig(N, lambda x: V(x, V0), 2)
    alpha = np.array([1, 1]) / sqrt(2)
    x = get_x(N)

    fig, ax = plt.subplots()
    ax.plot(x, V(x, V0), "k--")
    ax.set_ylabel("$E / [2mL/\hbar^2]$")
    ax.set_xlabel("$x / [L]$")
    ax.set_title("$N={}$".format(N))
    ax2 = ax.twinx()
    ax2.set_ylabel("$\Psi / [1]$")
    ax2.plot(x, time_evolve(v, l, 0, alpha), label="$\Psi(x, 0) \in \\bfR$")
    T = pi / (l[0] - l[1])
    ax2.plot(x, time_evolve(v, l, T, alpha).real, label="$\Re(\\Psi(x, T))$")
    ax2.plot(x, time_evolve(v, l, T, alpha).imag, label="$\Im(\\Psi(x, T))$")
    ax2.legend()

    plt.tight_layout()
    plt.savefig(FIG_PATH + "super_pos.pdf")
def plot_error(Ns):
    l = roots(f, 0.1, V0)
    nev = len(l)
    n = np.arange(1, nev + 1)
    m = len(Ns)

    fig, ax = plt.subplots(figsize=(8, 4))
    ax.set_xlabel("$n$")
    ax.set_ylabel("$|E_i-x_i|/x_0$")
    for i in range(m):
        N = Ns[i]
        l2, v = get_eig(N, V, nev)
        ax.plot(n,
                abs((l - l2) / l[0]),
                "x",
                label="$N={}$".format(Ns[i]),
                ms=12)
    ax.legend()
    plt.tight_layout()
    plt.savefig(FIG_PATH + "roots_error.pdf")
def plot_eigvecs(N, nev):
    l, v = get_eig(N, V, nev)
    x = np.linspace(1 / N, 1 - 1 / N, N - 1)

    fig, ax = plt.subplots(figsize=(12, 5))
    ax.plot(x, V(x), "--k")
    ax.set_ylabel("$E / [2mL/\hbar^2]$")
    ax.set_xlabel("$x / [L]$")
    ax.set_title("$N={}$".format(N))
    ax2 = ax.twinx()
    ax2.set_ylabel("$\Psi / [1]$")

    for i in range(nev):
        ax2.plot(x,
                 v[:, i].real,
                 color=cm.viridis(i / nev),
                 label="$\\psi_{}$".format(i))

    ax2.legend()
    plt.savefig(FIG_PATH + "eigenvecs.pdf")
Exemplo n.º 8
0
def plot_error(ns, N_max, V):
    Ns = np.arange(10, N_max + 1)
    m = len(ns)
    fig, ax = plt.subplots(1, m, figsize=(12, 3), sharex=True)
    for i in range(m):
        n = ns[i]
        ls = []
        for N in Ns:
            l, v = get_eig(N, V, n)
            ls.append(l[n - 1])
        ls = np.array(ls)
        ax[i].plot(Ns,
                   abs(ls - (pi * n)**2) / pi**2,
                   label="$|E_{}-(\pi {})^2|/\pi^2$".format(n, n))
        C = (Ns[0]**2 * abs(ls[0] - (pi * n)**2) / pi**2)
        ax[i].plot(Ns, C / Ns**2, "k:", label="${:.3f}/N^2$".format(C))
        ax[i].set_ylabel("rel. error")
        ax[i].set_xlabel("$N$")
        ax[i].legend()
    plt.tight_layout()
    plt.savefig(FIG_PATH + "error.pdf")
Exemplo n.º 9
0
def plot_eigvals(Ns, V, nev):
    n = np.arange(1, nev + 1)
    m = len(Ns)
    fig, ax = plt.subplots(m, 2, figsize=(12, 6), sharex=True)
    for i in range(m):
        N = Ns[i]
        l, v = get_eig(N, V, nev)
        ax[i, 0].plot(n, l, label="$E_n$")
        ax[i, 0].plot(n, (pi * n)**2, "k--")
        ax[i, 0].set_ylabel("$E / [2mL/\hbar^2]$")
        ax[i, 0].set_title("$N={}$".format(N))
        ax[i, 0].legend()
        ax[i, 1].plot(n,
                      abs((l - (pi * n)**2) / pi**2),
                      label="$|E_n-(\pi n)^2|/\pi^2$")
        ax[i, 1].set_ylabel("rel. error")
        ax[i, 1].legend()
    ax[-1, 0].set_xlabel("$n$")
    ax[-1, 1].set_xlabel("$n$")
    plt.tight_layout()
    plt.savefig(FIG_PATH + "values.pdf")
Exemplo n.º 10
0
def plot_vecs(N, Vr):
    l, v = get_eig(N, lambda x: V(x, Vr), 2)
    x = get_x(N)

    fig, ax = plt.subplots()
    v1 = v[:, 0]
    v2 = v[:, 1]
    print(inner(v1, V(x, Vr, 0)*v1))
    print(inner(v2, V(x, Vr, 0)*v1))
    print(inner(v2, V(x, Vr, 0)*v2))
    print(inner(v1, V(x, Vr, 0)*v2))
    ax.plot(x, v1)
    ax.plot(x, v2)
    ax2 = ax.twinx()
    ax2.plot(x, V(x, Vr), "k--")

    y1 = np.max(abs(v))
    y2 = np.max(abs(V(x, Vr)))
    # ax.set_ylim(-y1*1.1, y1*1.1)
    ax2.set_ylim(-y2*1.1, y2*1.1)
    plt.plot()
    plt.show()
def plot_time_evolve(N):
    l, v = get_eig(N, lambda x: V(x, V0), 2)
    alpha = np.array([1, 1]) / sqrt(2)
    x = get_x(N)

    fig, ax = plt.subplots(figsize=(12, 4))
    ax.plot(x, V(x, V0), "k--")
    ax.set_ylabel("$E / [2mL/\hbar^2]$")
    ax.set_xlabel("$x / [L]$")
    ax.set_title("$N={}$".format(N))
    ax2 = ax.twinx()
    ax2.set_ylabel("$|\Psi|^2 / [1]$")
    n = 5
    T = pi / (l[0] - l[1]) / n
    for i in range(n + 1):
        v_new = time_evolve(v, l, T * i, alpha)
        label = "$|\\Psi(x, {}T/{})|^2$".format(i, n)
        ax2.plot(x, abs(v_new)**2, label=label, color=color(i, n))
        ax2.legend()

    plt.tight_layout()
    plt.savefig(FIG_PATH + "time_evolve.pdf")
Exemplo n.º 12
0
def plot_eigvecs(N, V, nev):
    l, v = get_eig(N, V, nev)
    x = np.linspace(1 / N, 1 - 1 / N, N - 1)
    fig, ax = plt.subplots(nev, sharex=True, figsize=(5, 6))
    ax[0].set_title("$N={}$".format(N))
    for i in range(nev):
        v_exact = sin(pi * (i + 1) * x)
        c = 1 / sqrt(v_exact @ v_exact)
        ax[i].plot(x,
                   v[:, i],
                   "-",
                   color=color(i, nev),
                   label="$\psi_{}(x)$".format(i))
        ax[i].plot(x,
                   c * v_exact,
                   "k:",
                   label="$c\sin(2\pi{}x)$".format(i + 1))
        ax[i].legend(loc=1)
        ax[i].set_ylabel("$\psi/[1]$")
    ax[-1].set_xlabel("$x / [L]$")

    plt.tight_layout()
    plt.savefig(FIG_PATH + "vector_N={}.pdf".format(N))