Przeglądaj źródła

SSOR可以计算 效率待提高

newshell 7 lat temu
rodzic
commit
240b0caf8d
1 zmienionych plików z 10 dodań i 6 usunięć
  1. 10 6
      ssor.jl

+ 10 - 6
ssor.jl

@@ -39,9 +39,11 @@ function ssor(A::SparseMatrixCSC,b::Vector;tol::Real=1e-2,maxIter::Int=1,omega::
 		#第一次迭代
 		for i = 1:n
 			value = b[i]
-			for gidx = A.colptr[1] : A.colptr[n]
-				if A.rowval[gidx] == i
-					value -= A.nzval[gidx] * x[gidxi]
+			for j = 1:n
+				for gidx = A.colptr[j] : A.colptr[j+1]-1
+					if A.rowval[gidx] == i
+						value -= A.nzval[gidx] * x[j]
+					end
 				end
 			end
 			x[i]  = x[i] + value*OmInvD[i]
@@ -50,9 +52,11 @@ function ssor(A::SparseMatrixCSC,b::Vector;tol::Real=1e-2,maxIter::Int=1,omega::
 		#第二次迭代
 		for i = n:-1:1
 			value = b[i]
-			for gidx = A.colptr[1] : A.colptr[n]
-				if A.rowval[gidx] == i
-					value -= A.nzval[gidx] * x[i]
+			for j = 1:n
+				for gidx = A.colptr[j] : A.colptr[j+1]-1
+					if A.rowval[gidx] == i
+						value -= A.nzval[gidx] * x[j]
+					end
 				end
 			end
 			x[i]  = x[i] + value*OmInvD[i]