Skip to content

Read some input, generate some matrices, compute their signatures, etc.

Notifications You must be signed in to change notification settings

alexeymuranov/sig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sig
===

Read some input, generate some matrices, compute their signatures, select
"interesting" signatures, print them out.

Author: Alexey Muranov (Алексей Муранов).

Proposed by Stepan Orevkov (Степан Оревков).

Программa берёт на вход матрицу с полиномиальными коэффициентами.

Пример исходной матрицы 3х3:

[ [ -1 - s - t - s*t,  s + s*t,          0               ],
  [  1 + t,           -1 - s - t - s*t,  s + s*t         ],
  [  0,                1 + t,           -1 - s - t - s*t ] ]

После подстановки s = -1/a, t = -1/b получается:

[ [ -1 + 1/a + 1/b - 1/(a*b),  -1/a + 1/(a*b),  0 ],
  [ 1 - 1/b,  -1 + 1/a + 1/b - 1/(a*b),  -1/a + 1/(a*b) ],
  [ 0,  1 - 1/b,  -1 + 1/a + 1/b - 1/(a*b) ] ]

При умножении на (1-a)(1-b) получается

[ [ -4 + 2/a + 2*a + 2/b - 1/(a*b) - a/b + 2*b - b/a - a*b,
      2 - 2/a - 1/b + 1/(a*b) - b + b/a,
      0 ],
  [ 2 - 2*a - b^(-1) + a/b - b + a*b,
     -4 + 2/a + 2*a + 2/b - 1/(a*b) - a/b + 2*b - b/a - a*b,
      2 - 2/a - b^(-1) + 1/(a*b) - b + b/a ],
  [ 0,
      2 - 2*a - 1/b + a/b - b + a*b,
     -4 + 2/a + 2*a + 2/b - 1/(a*b) - a/b + 2*b - b/a - a*b ] ]

и эта матрица эрмитова при |a| = |b| = 1.

Переменные a и b надо заменять на всевозможные комплексные числа, равные
по модулю единице, кроме единицы.

Сигнатуру надо считать на всех таких значениях a и b, что |a| = |b| = 1,
a \ne 1, b \ne 1, с некоторым фиксированным шагом 1/q.
На самом деле, результат не меняется, если все параметры одновременно
заменить на сопряжённые.  Поэтому можно сделать, чтобы один из параметров
принимал только значения с неотрицательной мнимой частью.

Кроме сигнатуры надо еще считать дефект (англ: nullity; фр: nullité)
эрмитовой формы.  Это коранг матрицы -- число нулевых собственных чисел
(нулевое -- значит меньше чем, скажем, 10^{-10}).

Удобнее всего, если результат будет в виде списка (таблицы?) наборов чисел
(p_1,...,p_k,s,n),  где exp(2\pi i p_1/q), ... , exp(2\pi i p_k/q) --
значения параметров, s = signature, n = nullity.
При этом удобно, чтобы выдавались не все наборы, а только те, для которых
величина |s|-n больше некоторого наперед заданного значения.

Было бы еще неплохо, чтобы каждый раз выдавалось минимальное по модулю
собственное число, признанное ненулевым.
Это полезно, так как если оно будет слишком маленьким, то это будет
означать, что при этих значениях параметров надо для надежности все
пересчитать с более высокой точностью.

Надо выдавать и те случаи, где сигнатура интересная, не указывая мин.
собств. значение, и отдельно те случаи, когда есть подозрительно малые
собств. значения (независимо от того, какая там сигнатура).

About

Read some input, generate some matrices, compute their signatures, etc.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages