Как мы можем использовать RowReduce с модульными переменными AND?


2

Мы можем использовать RowReduce с полем. Например, мы констатируем

RowReduce[{{1,3,5},{0,1,2}},Modulous->23] 

... который затем возвращает:

{{1,0,22},{0,1,2}} 

... Так что у нас будет эффективно решать линейную систему в поле.

ВОПРОС

Можем ли мы каким-то образом использовать это, чтобы решить систему с переменными, т.е. решить символическую систему? В качестве примера, я хотел бы как-то решить:

RowReduce[{{1,3,a},{0,1,b}},Modulous->23] 

Идея заключается в том, что мы должны получить результат, по существу, о том, что-то вроде:

{{1,0,a - 3b},{0,1,b}} 

или, возможно, даже лучше:

{{1,0,a + 20b},{0,1,b}} 

Первый результат - это просто решение без включенного modulous. Мне интересно, есть ли способ получить второй результат.

  0

'RowReduce [{{1, 3, а}, {0, 1, Ь}}]' дает '{{1, 0, a - 3 b}, {0, 1, b}} '. Все, что вам кажется нужным, состоит в том, чтобы каждый элемент этого элемента был уменьшен по модулю? 26 авг. 132013-08-26 00:54:59

  0

@ bills: Вид. Проблема в том, что если я не использую поле, значения/коэффициенты астрономически велики. Поэтому я хотел бы найти способ работать с меньшими коэффициентами, если это возможно. В конце концов, результаты, полученные из этой части линейной алгебры, будут использоваться в любом случае. 26 авг. 132013-08-26 03:19:36

+1

Проверьте nb [здесь] (http://library.wolfram.com/infocenter/Conferences/325/). См. Раздел «Линейная алгебра в поле Галуа» 26 авг. 132013-08-26 18:57:58

  0

@ DanielLichtblau: Кажется, у меня есть решение, которое я ищу. К сожалению, у меня нет математического фона для понимания основы Groebner. Я был бы признателен, если бы кто-то мог по существу преобразовать этот код во что-то, что работает с целыми числами по модулю $ p $. 26 авг. 132013-08-26 19:08:15

  0

По существу конвертировано. 26 авг. 132013-08-26 19:24:45

3

За этот комментарий, это основано на «Линейная алгебра в поле Галуа» из ноутбука, доступного here. (Учитывая его возраст, можно удивиться тому, как часто мне это кажется).

Упакованный Код:

rowReduceModP[mat_?MatrixQ, p_] /; PrimeQ[p] := Module[ 
    {n = Length[mat[[1]]], z, newvars, gb}, 
    newvars = Array[z, n]; 
    gb = GroebnerBasis[mat.newvars, newvars, 
    CoefficientDomain -> RationalFunctions, Modulus -> p]; 
    Reverse[Outer[D, gb, newvars]] 
    ] 

Пример:

mat = {{1, 3, a}, {0, 1, b}}; 
rowReduceModP[mat, 23] 

(* Out[42]= {{1, 0, a + 20 b}, {0, 1, b}} *)