Example #1
0
def convergence_rate():
    """What is the convergence rate of the Euler-Cromer method?"""
    from vib_undamped import convergence_rates
    def solver_wrapper(I, w, dt, T):
        # convergence_rates demands a solver that returns u, t
        u, v, t = solver(I, w, dt, T)
        return u, t

    def solver_ic_fix_wrapper(I, w, dt, T):
        # convergence_rates demands a solver that returns u, t
        u, v, t = solver(I, w, dt, T)
        return u, t

    def solver_adjust_w_wrapper(I, w, dt, T):
        # convergence_rates demands a solver that returns u, t
        u, v, t = solver_adjust_w(I, w, dt, T, True)
        return u, t

    # Plain Euler-Cromer
    r = convergence_rates(8, solver_wrapper)
    print(round(r[-1], 1))
    # Does it help to fix the initia condition?
    r = convergence_rates(8, solver_ic_fix_wrapper)
    print(round(r[-1], 1))
    # Adjusted w
    r = convergence_rates(8, solver_adjust_w_wrapper)
    print(round(r[-1], 1))
def convergence_rate():
    """What is the convergence rate of the Euler-Cromer method?"""
    from vib_undamped import convergence_rates
    def solver_wrapper(I, w, dt, T):
        # convergence_rates demands a solver that returns u, t
        u, v, t = solver(I, w, dt, T)
        return u, t

    def solver_ic_fix_wrapper(I, w, dt, T):
        # convergence_rates demands a solver that returns u, t
        u, v, t = solver(I, w, dt, T)
        return u, t

    def solver_adjust_w_wrapper(I, w, dt, T):
        # convergence_rates demands a solver that returns u, t
        u, v, t = solver_adjust_w(I, w, dt, T, True)
        return u, t

    # Plain Euler-Cromer
    r = convergence_rates(8, solver_wrapper)
    print round(r[-1], 1)
    # Does it help to fix the initia condition?
    r = convergence_rates(8, solver_ic_fix_wrapper)
    print round(r[-1], 1)
    # Adjusted w
    r = convergence_rates(8, solver_adjust_w_wrapper)
    print round(r[-1], 1)
def test_convergence():
    """Verify 2nd-order convergence."""
    from vib_undamped import convergence_rates
    def wrapped_solver(I, w, dt, T):
        u, t, v, t_v = solver(I, w, dt, T)
        return u, t

    r = convergence_rates(8, wrapped_solver, 8)
    print r
    assert abs(r[-1] - 2) < 1E-5
Example #4
0
def test_convergence():
    """Verify 2nd-order convergence."""
    from vib_undamped import convergence_rates
    def wrapped_solver(I, w, dt, T):
        u, t, v, t_v = solver(I, w, dt, T)
        return u, t

    r = convergence_rates(8, wrapped_solver, 8)
    print r
    assert abs(r[-1] - 2) < 1E-5
from vib_undamped import (zeros, linspace, convergence_rates, main)


def solver(I, w, dt, T, return_v=False):
    """
    Solve u'=v, v'=-w**2*u for t in (0,T], u(0)=I and v(0)=0,
    by the velocity Verlet method with time step dt.
    """
    dt = float(dt)
    Nt = int(round(T / dt))
    u = zeros(Nt + 1)
    v = zeros(Nt + 1)
    t = linspace(0, Nt * dt, Nt + 1)

    u[0] = I
    v[0] = 0
    for n in range(Nt):
        u[n + 1] = u[n] + v[n] * dt - 0.5 * dt**2 * w**2 * u[n]
        v[n + 1] = v[n] - 0.5 * dt * w**2 * (u[n] + u[n + 1])
    if return_v:
        return u, v, t
    else:
        # Return just u and t as in the vib_undamped.py's solver
        return u, t


if __name__ == '__main__':
    main(solver_function=solver)
    raw_input()
    print convergence_rates(m=5, solver_function=solver)
    zeros, linspace,
    convergence_rates,
    main)

def solver(I, w, dt, T, return_v=False):
    """
    Solve u'=v, v'=-w**2*u for t in (0,T], u(0)=I and v(0)=0,
    by the velocity Verlet method with time step dt.
    """
    dt = float(dt)
    Nt = int(round(T/dt))
    u = zeros(Nt+1)
    v = zeros(Nt+1)
    t = linspace(0, Nt*dt, Nt+1)

    u[0] = I
    v[0] = 0
    for n in range(Nt):
        u[n+1] = u[n] + v[n]*dt - 0.5*dt**2*w**2*u[n]
        v[n+1] = v[n] - 0.5*dt*w**2*(u[n] + u[n+1])
    if return_v:
        return u, v, t
    else:
        # Return just u and t as in the vib_undamped.py's solver
        return u, t

if __name__ == '__main__':
    main(solver_function=solver)
    raw_input()
    print convergence_rates(m=5, solver_function=solver)