Defactoring: Difference between revisions
Cmloegcmluin (talk | contribs) |
Cmloegcmluin (talk | contribs) |
||
| Line 612: | Line 612: | ||
==== Wolfram Language implementation ==== | ==== Wolfram Language implementation ==== | ||
This is the furthest progress that was made on SAD defactor before efforts were shifted to column Hermite defactor. This implementation still exhibits problems 2 | This is the furthest progress that was made on SAD defactor before efforts were shifted to column Hermite defactor. This implementation still exhibits problems 2 and 3; only problems 1 and 4 were solved here. Problem 3 started to be solved, but wasn't quite quashed. | ||
<nowiki> | <nowiki> | ||
confirmEnfactoredRowReplaced[m_] := Module[{i, enfactoredRowReplaced}, | |||
enfactoredRowReplaced = True; | |||
For[i = 1, i <= Length[m], i++, | |||
If[Apply[GCD, m[[i]]] > 1, enfactoredRowReplaced = False] | |||
]; | |||
enfactoredRowReplaced | |||
]</nowiki> | ]; | ||
handleEnfactored[m_, maybeDisarmedRow_] := Module[{defactored, attemptedReplacementOfEnfactoredRow, i, enfactoredRowReplaced}, | |||
For[i = 1, i <= Length[m], i++, | |||
attemptedReplacementOfEnfactoredRow = Prepend[Drop[m, {i}], First[maybeDisarmedRow]]; | |||
enfactoredRowReplaced = confirmEnfactoredRowReplaced[attemptedReplacementOfEnfactoredRow]; | |||
If[enfactoredRowReplaced, defactored = enhancedSadDefactor[attemptedReplacementOfEnfactoredRow]]; | |||
]; | |||
defactored | |||
]; | |||
enhancedSadDefactor[m_] := Module[{mNoAllZeros, reduced, linCombs, linCombsDisarmed, maybeDisarmedRow}, | |||
mNoAllZeros = removeAllZeroRows[m]; | |||
linCombs = linCombsToCheck[mNoAllZeros]; | |||
linCombsDisarmed = Map[extractGcd, linCombs]; | |||
maybeDisarmedRow = Complement[linCombsDisarmed, linCombs]; | |||
If[Length[maybeDisarmedRow] == 0, mNoAllZeros, handleEnfactored[mNoAllZeros, maybeDisarmedRow]] | |||
];</nowiki> | |||
=== MADAM defactoring === | === MADAM defactoring === | ||