Skip to content

Commit 69fb852

Browse files
committed
pivot on the least complex expression
1 parent 614dfcd commit 69fb852

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/solve.jl

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,26 @@
1+
using SymbolicUtils: istree
2+
3+
function nterms(t)
4+
if istree(t)
5+
return reduce(+, map(nterms, arguments(t)), init=0)
6+
else
7+
return 1
8+
end
9+
end
110
# Soft pivoted
211
# Note: we call this function with a matrix of Union{SymbolicUtils.Symbolic, Any}
312
# It should work as-is with Operation type too.
413
function sym_lu(A)
514
m, n = size(A)
6-
L = Array{Any}(undef, size(A)) # TODO: make sparse?
15+
L = fill!(Array{Any}(undef, size(A)),0) # TODO: make sparse?
716
for i=1:min(m, n)
817
L[i,i] = 1
918
end
1019
U = copy(A)
1120
p = BlasInt[1:m;]
1221
for k = 1:m-1
13-
i = k
14-
for ii=k:n
15-
if !iszero(U[ii, k])
16-
i = ii
17-
break
18-
end
19-
end
22+
_, i = findmin(map(ii->iszero(U[ii, k]) ? Inf : nterms(U[ii,k]), k:n))
23+
i += k - 1
2024
# swap
2125
U[k, k:end], U[i, k:end] = U[i, k:end], U[k, k:end]
2226
L[k, 1:k-1], L[i, 1:k-1] = L[i, 1:k-1], L[k, 1:k-1]

0 commit comments

Comments
 (0)