using LinearAlgebra function parpiv(A) #μερική οδήγηση Gauss #Γιάννης Ιορδάνης A=Float64.(A) n=size(A,1) p=Array{Int64}(ones(n));for i=1:n;p[i]=i;end for k= 1:n-1 #------------------------------------------------- #εντοπισμός τιμής μέγιστου (απόλυτα) στην 1η στήλη υποπίνακα local ma=maximum(abs.(A[k:n,k:k])) #------------------------------------------------ #εντοπισμός θέσης μέγιστου (απόλυτα) στην 1η στήλη σε υποπίνακα local pos = findfirst( x -> x == ma, abs.(A[k:n,k:n])) local i=pos[1]; local i = i+k-1 #------------------------------------------------ #αντιμετάθεση γραμμών A[[k i], :] = A[[i k], :] #-------------------------------------- # παραγωγή μεταθετικού πίνακα P p[[k i]] = p[[i k]] #απενεργοποίηση #---------------------------------------- #υπολογισμός πολλαπλασιαστών και απαλοιφή if A[k, k] != 0.0 A[k+1:n, k] = A[k+1:n, k]/A[k, k] A[k+1:n, k+1:n] = A[k+1:n, k+1:n] - A[k+1:n, k]*(A[k, k+1:n])'; end #---------------------------------------------- end #---------------------------------------------- U=UpperTriangular(A) L=UnitLowerTriangular(A) P1=Diagonal(ones(n,n))+zeros(n,n); P=P1[p,:] P,L,U end