I want to implement incomplete Cholesky factorization to precondition, the algorithm I refer from [incomplete Cholesky factorization](https://en.wikipedia.org/wiki/Incomplete_Cholesky_factorization),

```lang-matlab
function a = ichol(a)
	n = size(a,1);

	for k=1:n
		a(k,k) = sqrt(a(k,k));
		for i=(k+1):n
		    if (a(i,k)!=0)
		        a(i,k) = a(i,k)/a(k,k);            
		    endif
		endfor
		for j=(k+1):n
		    for i=j:n
		        if (a(i,j)!=0)
		            a(i,j) = a(i,j)-a(i,k)*a(j,k);  
		        endif
		    endfor
		endfor
	endfor

    for i=1:n
        for j=i+1:n
            a(i,j) = 0;
        endfor
    endfor            
endfunction

```
but it seems not right.

The problem is the algorithm cannot guarantee that `a[k,k]` is a positive integer. When `a[k,k]` is not a positive integer, the algorithm will incur an error. 

I want to ask for the correct version of Cholesky decomposition and some relevant references.