if Length(r) <> sys.nrvars or Length(s) <> sys.nrsolutions
or(sys.conv and sys.fieldsize <> ConvertToVectorRep(r, sys.fieldsize))
or(sys.convsol and sys.fieldsize <> ConvertToVectorRep(s, sys.fieldsize)) then
Error("vectors must be of the right length and over the correct field"); fi;
row := ShallowCopy(r);
sol := ShallowCopy(s);
i := 1; while i <= sys.nrvars do
coeff := row[i]; if coeff <> sys.zero then if IsBound(sys.equations[i]) then # row := row - row[i] * sys.equations[i];
AddRowVector(row, sys.equations[i], - coeff); if sys.nrsolutions > 0then
AddRowVector(sol, sys.solutions[i], - coeff); fi; elif coeff = sys.one then
sys.equations[i] := row; if sys.nrsolutions > 0then
sys.solutions[i] := sol; fi;
sys.nrequations := sys.nrequations + 1;
return true; else
sys.equations[i] := row / coeff; if sys.nrsolutions > 0then
sys.solutions[i] := sol / coeff; fi;
sys.nrequations := sys.nrequations + 1;
return true; fi; fi;
i := i + 1;
od;
solv := true; for i in [1..sys.nrsolutions] do if sys.soluble[i] and sol[i] <> sys.zero then
sys.soluble[i] := false;
solv := false; fi;
od;
for i in [sys.nrvars, sys.nrvars-1..1] do # treat the i-th row if IsBound(sys.equations[i]) then
s[i] := sys.solutions[i][n] - s*sys.equations[i]; fi;
od;
for i in [sys.nrvars, sys.nrvars-1..1] do # treat the i-th row if not IsBound(sys.equations[i]) then
v := ShallowCopy(sys.nullrow);
v[i] := sys.one; for j in [i-1, i-2 .. 1] do if IsBound(sys.equations[j]) then
v[j] := - v * sys.equations[j]; fi;
od;
Add(nullspace, v{[1..sys.nrvars]}); fi;
od;
return nullspace; end);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.