123456789101112131415161718192021222324252627282930313233343536 |
- function jacobi(A::SparseMatrixCSC,b::Vector;tol::Real=1e-2,maxIter::Int=1,out::Int=0,storeInterm::Bool=false;)
- n = length(b)
- OmInvD = 1./diag(A) #D矩阵 并乘以omega
- x = zeros(eltype(A),n)
- r = copy(b)
- rnorm0 = norm(b)
- res = 0
- value = 0.0
- flag = -1
- iter = 0
- dx = 0
- for iter = 1:maxIter
- println(iter)
- dr = zeros(eltype(A),n)
- for j = 1:n
- dx = r[j] * OmInvD[j]
- x[j] += dx
- for gidx = A.colptr[j] : A.colptr[j+1]-1
- dr[A.rowval[gidx]] -= A.nzval[gidx] * dx
- end
- end
- r += dr
- res = norm(r) / rnorm0
- println(res)
- if res < tol
- flag = 0; break
- end
- end
- return x,flag,iter
- end
|