Алгоритм относительно ортогональных матриц

Скажем, у меня есть n-мерная ортогональная матрица, некоторые элементы которой заданы, а остальные неизвестны. Существует ли эффективный алгоритм нахождения неизвестных элементов и восстановления всей матрицы (он должен найти только одно решение, если их много, и выдает ошибку, когда решения не существует)?

Спасибо!


person Niko    schedule 15.01.2015    source источник


Ответы (1)


Решение зависит от того, сколько элементов в строке/столбце отсутствует.

  • Я вижу два способа, как подойти к этому

<сильный>1. не более 1 элемента отсутствует в строке/столбце

  • в этом случае вы можете использовать тот факт, что любая строка/столбец ортогональной матрицы является единичным вектором
  • поэтому для любой строки/столбца { a1,a2,a3=??,a4,...,an }
  • неизвестный элемент a3=sqrt(1-a1^2-a2^2-a4^2-a5^2-...-an^2)
  • если у вас есть более одного неизвестного элемента в строке, используйте столбец и наоборот
  • если в строке и столбцах одновременно слишком много неизвестных
  • тогда вам нужно использовать другой подход для этого элемента

<сильный>2. более 1 отсутствующего элемента

  • сначала найдите все неизвестные, которые можно найти с помощью подхода 1
  • тогда вы можете использовать это Inverse(Q)==Transpose(Q), если Q ортогонален
  • поэтому выведите алгебраическую формулу на неизвестный элемент из обратного Q
  • и сравните его с транспонированным
  • это создаст одно линейное уравнение
  • сделать это для всех неизвестных и решить систему

         a11 a12     a13
    Q =  a21 a22=?? a23=??
         a31 a32=?? a33=??
    
                      a11 a21 a31
    transpose(Q) =  a12 a22=?? a32=??
                      a13 a23=?? a33=??
    
                 i11 i12 i13
    inverse(Q)= i21 i22 i23
                 i31 i32 i33
    
    det=a11.a22.a33+a21.a32.a13+a31.a12.a23-a11.a32.a23-a31.a22.a13-a21.a12.a33
    a22=i22=(a11.a33-a13.a31)/det
    a32=i23=(a13.a21-a11.a23)/det
    a23=i32=(a12.a31-a11.a32)/det
    a33=i33=(a11.a22-a12.a21)/det
    
  • это должно быть решаемо...

  • если нет, то вы также можете добавить уравнения из списка 1
  • если все еще нет, то либо решение не может быть найдено, либо вам нужно использовать другой подход

Перед вычислением вы должны сначала проверить, не слишком ли велики |elements|

  • поэтому суммируйте все известные элементы ^ 2 в строке/столбце, и результат должен быть <=1
  • если нет, то это ни ортогональная матрица...
  • для получения дополнительной информации см. Ортогональные матрицы (Wiki)

<сильный>3. если у вас element=1.0

  • тогда все элементы в этой строке/столбце будут равны нулю
person Spektre    schedule 15.01.2015