Как рассчитать ранг с Symbolic

Код:

with(LinearAlgebra): 
mat := Matrix([[a, b, b, b, b], [b, a, b, b, b], [b, b, a, b, b],
 [b, b, b, a, b], [b, b, b, b, a]]);
Rank(mat);

Функция Rank только что дала мне результат 5, но на самом деле:

when a=b=0,rank(mat)=0
when a=b≠0,rank(mat)=1
when a+4b=0,rank(mat)=4
when a≠b&&a≠-4b,rank(mat)=5

Клен рассчитал это как другое состояние?


person yode    schedule 04.04.2017    source источник


Ответы (1)


В большинстве случаев Maple рассматривает символы, такие как a и b в этом примере, как общие (например, они не удовлетворяют каким-либо алгебраическим уравнениям, таким как a-b=0 и т. д.), и в этих предположениях ранг равен 5. Это не совсем бесполезный результат, так как возможно иметь символическую матрицу, которая обычно не имеет полного ранга.

Если вы хотите получить все случаи, я думаю, вам, вероятно, придется вручную вычислить символические детерминанты/миноры и найти их корни. например

d5 := LinearAlgebra:-Determinant(mat);
s := {solve(d5, a)}; # two solutions
mat1 := eval(mat, a = s[1]); # a=b
LinearAlgebra:-Rank(mat1); # rank=1
mat2 := eval(mat, a = s[2]); # a=-4*b
LinearAlgebra:-Rank(mat2); # rank=3

Чтобы перейти к регистру более низкого ранга, вам нужно начать смотреть на нули миноров мат1 и мат2. Так как mat1 имеет ранг 1, вы должны посмотреть, что делает его младшие 1x1 нулевыми, но поскольку mat1 имеет все идентичные записи, это условие просто b = 0.

Вам все еще нужно проверить мат2, потому что может быть случай ранга = 2 или другие условия на b, которые дают вам ранг 1 или 0.

minors := { seq(seq(LinearAlgebra:-Minor(mat2, i, j), i=1..5), j=1..5)) };
s2 := solve(minors, b); # {b=0}
LinearAlgebra:-Rank( eval(mat2, s2) ); # 0

Это показывает нам, что единственная возможность более низкого ранга, когда a=-4*b, - это когда b=0, поэтому то же условие ранга 0, что и при a=b. Вот и все дела.

Если бы это было не во всех случаях, вам пришлось бы обратить внимание на второстепенные символы 3x3 и 2x2, что потребовало бы разумного использования команды LinearAlgebra:-SubMatrix. В общем случае этот подход может привести к большому разделению регистра, и почти наверняка есть лучший способ сделать это в более общем случае, повторно используя второстепенные вычисления.

Если у вас есть основания полагать, что ваша матрица в целом диагонализируема, вы можете посмотреть, где исчезают коэффициенты характеристического многочлена.

person John M    schedule 04.04.2017
comment
Это хорошее начало, большое спасибо. Просто не подходит для случая, когда ранг равен 0. - person yode; 05.04.2017
comment
Чтобы получить условия для случая ранга 0, вам нужно начать смотреть на несовершеннолетних. Для условия a=-4*b любой из миноров 3x3 (например, LinearAlgebra:-Minor( eval(mat, a=s[2]), 1,1)) даст вам условие b=0. Для условия a = b матрица имеет ранг 1, поэтому вам нужно смотреть только на миноры 1x1, что сразу дает вам b = 0. - person John M; 05.04.2017
comment
Меня это впечатляет. И не могли бы вы опубликовать это как полный ответ для последующего читателя? Я приму его. - person yode; 05.04.2017
comment
Спасибо большое. - person yode; 07.04.2017