Skip to content
DeepForgeby svx
All problems
MediumLinear Algebrala-211

SOR Iteration Step

Problem

Perform one successive over-relaxation (SOR) step for A*x = b:

x_new[i] = (1 - omega) * x[i] + omega * (b[i] - sum over j != i of A[i][j] * x[j]) / A[i][i]

Already updated components are used immediately. Assume nonzero diagonal.

Hint

omega = 1 recovers Gauss-Seidel; 1 < omega < 2 is over-relaxation.

Test cases

case 1
in: [[[4,1],[1,3]],[1,2],[0,0],1]
expected: [0.25,0.5833333333333334]
case 2
in: [[[4,1],[1,3]],[1,2],[0,0],0.5]
expected: [0.125,0.3125]
case 3
in: [[[2,0],[0,4]],[4,8],[1,1],1.5]
expected: [2.5,2.5]
case 4
in: [[[3,-1],[-1,2]],[5,3],[0,0],1]
expected: [1.6666666666666667,2.3333333333333335]
Starter codePython
def sor_step(A, b, x0, omega):
    # Your code here
    pass

4 test cases · run your code against them in the editor