2015-01-15 5 views
0

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

Спасибо!

ответ

0

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

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

1. Макс 1 элемент отсутствующий в строке/столбце

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

более 2. затем 1 недостающий элемент

  • сначала найти все неизвестные, которые можно найти по Appro ACH 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
  • если нет, то это не ортогональная матрица ...
  • для получения дополнительной информации см Orthogonal matrixes (Wiki)

3. если у вас есть элемент = 1,0

  • то все элементы этой строки/столбца будет равна нулю

 Смежные вопросы

  • Нет связанных вопросов^_^