Exemplo n.º 1
0
def solve_gauss_seidel(A, b, x0=None, maxiter=100):
    N = len(b)
    L, D, U = lower_diag_upper(A)
    E = -L
    F = -U

    x = parse_initial_cond(x0, N)

    residual = 1

    for _ in xrange(maxiter):
        x = spsolve(D - E, (b + F * x))
        residual = compute_normalized_linf_residual(A, x, b)

    return x, residual
Exemplo n.º 2
0
def solve_jacobi(A, b, x0=None, maxiter=100):
    N = len(b)
    L, D, U = lower_diag_upper(A)
    E = - L
    F = - U

    D.data[:] = 1. / D.data[:]
    D_inv = D

    x = parse_initial_cond(x0, N)

    for _ in xrange(maxiter):
        x = D_inv * (b + (E + F) * x)
        residual = compute_normalized_linf_residual(A, x, b)

    return x, residual
Exemplo n.º 3
0
def solve_ssor(A, b, x0=None, maxiter=100):
    L, D, U = lower_diag_upper(A)
    E = -L
    F = -U
    N = len(b)
    x = parse_initial_cond(x0, N)
    w = 1.24

    residual = 1

    for _ in xrange(maxiter):
        x_gauss_seidel = spsolve(D - E, (b + F * x))
        x = w * x_gauss_seidel + (1. - w) * x

        x_gauss_seidel = spsolve(D - F, (b + E * x))
        x = w * x_gauss_seidel + (1. - w) * x

        residual = compute_normalized_l2_residual(A, x, b)

    return x, residual