Решение зависит от того, сколько элементов в строке/столбце отсутствует.
- Я вижу два пути, как подойти к этому
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
- то все элементы этой строки/столбца будет равна нулю