We now have ResourceFunction["UpperTriangularDecomposition"] in the Wolfram Function Repository. It returns an upper-triangulated form and the corresponding conversion matrix as {uu,conv}
. It effectively shows the parameter functions that must not vanish in order to get the "generic" reduced echelon form. These appear as pivots in the upper triangular part.
mat = {{a, b, 0, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 0, a1, b1, 0, 0, 1}, {0,
0, c, d, 0, 0, 0, 0, 1}, {0, 0, 0, 0, 0, 0, c1, d1, 1}, {0, b1,
0, -d1, a, 0, -c, 0, 0}, {-b1, 0, d1, 0, b, 0, -d, 0, 0}, {0, -a1,
0, c1, 0, a, 0, -c, 0}, {a1, 0, -c1, 0, 0, b, 0, -d, 0}};
{uu, conv} = ResourceFunction["UpperTriangularDecomposition"][mat]
(* Out[129]= {{{a, b, 0, 0, 0, 0, 0, 0, 1}, {0, -a1, 0, c1, 0, a, 0, -c,
0}, {0, 0, c, d, 0, 0, 0, 0, 1}, {0, 0,
0, -a b1 c1 + a a1 d1, -a^2 a1, -a^2 b1, a a1 c, a b1 c, 0}, {0, 0,
0, 0, a1, b1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, c1, d1, 1}, {0, 0, 0,
0, 0, 0, 0,
0, -a1^2 b c^2 c1 + a a1 b c c1^2 + a1^2 b1 c c1^2 - a a1 b1 c1^3 +
a a1^2 c c1 d - a^2 a1 c1^2 d - a1^3 c c1 d1 +
a a1^2 c1^2 d1}, {0, 0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0, 0,
0, 0}, {0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0,
0, 0, -a a1, 0, -a b1, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1,
0, 0, 0, 0}, {a1^2 b1 c c1^2 - a1^3 c c1 d1,
a a1 b c c1^2 - a^2 a1 c1^2 d, -a a1 b1 c1^3 +
a a1^2 c1^2 d1, -a1^2 b c^2 c1 + a a1^2 c c1 d, -a1^2 b c c1^2 +
a a1^2 c1^2 d, 0,
a a1 b1 c1^2 d - a1^2 b c c1 d1, -a a1 b1 c c1^2 +
a a1^2 c c1 d1}, {a1 b b1 c c1^2 - a1 b1^2 c1^3 - a a1 b1 c1^2 d -
a1^2 b c c1 d1 + 2 a1^2 b1 c1^2 d1 + a a1^2 c1 d d1 -
a1^3 c1 d1^2,
a1 b^2 c^2 c1 - a1 b b1 c c1^2 - 2 a a1 b c c1 d + a a1 b1 c1^2 d +
a^2 a1 c1 d^2 + a1^2 b c c1 d1 -
a a1^2 c1 d d1, -a1 b b1 c c1^2 + a1 b1^2 c1^3 + a a1 b1 c1^2 d +
a1^2 b c c1 d1 - 2 a1^2 b1 c1^2 d1 - a a1^2 c1 d d1 +
a1^3 c1 d1^2, -a1 b^2 c^2 c1 + a1 b b1 c c1^2 + 2 a a1 b c c1 d -
a a1 b1 c1^2 d - a^2 a1 c1 d^2 - a1^2 b c c1 d1 +
a a1^2 c1 d d1, -a1 b^2 c c1^2 + a1 b b1 c1^3 + a1^2 b c c1 d +
a a1 b c1^2 d - a1^2 b1 c1^2 d - a a1^2 c1 d^2 - a1^2 b c1^2 d1 +
a1^3 c1 d d1, -a1^2 b c^2 c1 + a a1 b c c1^2 + a1^2 b1 c c1^2 -
a a1 b1 c1^3 + a a1^2 c c1 d - a^2 a1 c1^2 d - a1^3 c c1 d1 +
a a1^2 c1^2 d1,
a1 b b1 c c1 d - a1 b1^2 c1^2 d - a a1 b1 c1 d^2 - a1 b^2 c c1 d1 +
a1 b b1 c1^2 d1 + a a1 b c1 d d1 + a1^2 b1 c1 d d1 -
a1^2 b c1 d1^2, -a1 b b1 c^2 c1 + a1 b1^2 c c1^2 +
a a1 b1 c c1 d + a a1 b c c1 d1 - a1^2 b1 c c1 d1 -
a a1 b1 c1^2 d1 - a^2 a1 c1 d d1 + a a1^2 c1 d1^2}}} *)
When the algebra is done "by hand"
Can you show the hand solution then which is different from Mathematica solution? $\endgroup$(RowReduce[mat, ZeroTest -> (PossibleZeroQ[Simplify[#]] &)]) // MatrixForm
if you want to see the content not simplified. But your question is not clear. Are you saying the second row from the bottom is supposed to be all zeros and not have 1 as it last entry? $\endgroup$x/x
is not 1 whenx
is symbol with no value. At least I do not know how to do it.Assuming[x == 0, Simplify[x/x]]
gives 1 always. I think the front end replacesx/x
by 1 before the kernel even gets hold of it. But I am not sure. $\endgroup$