inversion

This commit is contained in:
Jennifer Chukwu 2024-04-19 14:49:14 +00:00
parent a803815bd1
commit d331bbd7c1
1 changed files with 127 additions and 104 deletions

View File

@ -145,124 +145,149 @@ where
{ {
let m = m.as_slice(); let m = m.as_slice();
out[(0, 0)] = m[5].clone() * m[10].clone() * m[15].clone() let det = m[0].clone()
- m[5].clone() * m[11].clone() * m[14].clone() * (m[5].clone() * m[10].clone() * m[15].clone()
- m[9].clone() * m[6].clone() * m[15].clone() + m[6].clone() * m[11].clone() * m[13].clone()
+ m[9].clone() * m[7].clone() * m[14].clone() + m[7].clone() * m[9].clone() * m[14].clone()
+ m[13].clone() * m[6].clone() * m[11].clone() - m[7].clone() * m[10].clone() * m[13].clone()
- m[13].clone() * m[7].clone() * m[10].clone(); - m[6].clone() * m[9].clone() * m[15].clone()
- m[5].clone() * m[11].clone() * m[14].clone())
- m[1].clone()
* (m[4].clone() * m[10].clone() * m[15].clone()
+ m[6].clone() * m[11].clone() * m[12].clone()
+ m[7].clone() * m[8].clone() * m[14].clone()
- m[7].clone() * m[10].clone() * m[12].clone()
- m[6].clone() * m[8].clone() * m[15].clone()
- m[4].clone() * m[11].clone() * m[14].clone())
+ m[2].clone()
* (m[4].clone() * m[9].clone() * m[15].clone()
+ m[5].clone() * m[11].clone() * m[12].clone()
+ m[7].clone() * m[8].clone() * m[13].clone()
- m[7].clone() * m[9].clone() * m[12].clone()
- m[5].clone() * m[8].clone() * m[15].clone()
- m[4].clone() * m[11].clone() * m[13].clone())
- m[3].clone()
* (m[4].clone() * m[9].clone() * m[14].clone()
+ m[5].clone() * m[10].clone() * m[12].clone()
+ m[6].clone() * m[8].clone() * m[13].clone()
- m[6].clone() * m[9].clone() * m[12].clone()
- m[5].clone() * m[8].clone() * m[14].clone()
- m[4].clone() * m[10].clone() * m[13].clone());
if det.is_zero() {
false
} else {
out[(0, 0)] = m[5].clone() * m[10].clone() * m[15].clone()
- m[5].clone() * m[11].clone() * m[14].clone()
- m[9].clone() * m[6].clone() * m[15].clone()
+ m[9].clone() * m[7].clone() * m[14].clone()
+ m[13].clone() * m[6].clone() * m[11].clone()
- m[13].clone() * m[7].clone() * m[10].clone();
out[(1, 0)] = -m[1].clone() * m[10].clone() * m[15].clone() out[(1, 0)] = -m[1].clone() * m[10].clone() * m[15].clone()
+ m[1].clone() * m[11].clone() * m[14].clone() + m[1].clone() * m[11].clone() * m[14].clone()
+ m[9].clone() * m[2].clone() * m[15].clone() + m[9].clone() * m[2].clone() * m[15].clone()
- m[9].clone() * m[3].clone() * m[14].clone() - m[9].clone() * m[3].clone() * m[14].clone()
- m[13].clone() * m[2].clone() * m[11].clone() - m[13].clone() * m[2].clone() * m[11].clone()
+ m[13].clone() * m[3].clone() * m[10].clone(); + m[13].clone() * m[3].clone() * m[10].clone();
out[(2, 0)] = m[1].clone() * m[6].clone() * m[15].clone() out[(2, 0)] = m[1].clone() * m[6].clone() * m[15].clone()
- m[1].clone() * m[7].clone() * m[14].clone() - m[1].clone() * m[7].clone() * m[14].clone()
- m[5].clone() * m[2].clone() * m[15].clone() - m[5].clone() * m[2].clone() * m[15].clone()
+ m[5].clone() * m[3].clone() * m[14].clone() + m[5].clone() * m[3].clone() * m[14].clone()
+ m[13].clone() * m[2].clone() * m[7].clone() + m[13].clone() * m[2].clone() * m[7].clone()
- m[13].clone() * m[3].clone() * m[6].clone(); - m[13].clone() * m[3].clone() * m[6].clone();
out[(3, 0)] = -m[1].clone() * m[6].clone() * m[11].clone() out[(3, 0)] = -m[1].clone() * m[6].clone() * m[11].clone()
+ m[1].clone() * m[7].clone() * m[10].clone() + m[1].clone() * m[7].clone() * m[10].clone()
+ m[5].clone() * m[2].clone() * m[11].clone() + m[5].clone() * m[2].clone() * m[11].clone()
- m[5].clone() * m[3].clone() * m[10].clone() - m[5].clone() * m[3].clone() * m[10].clone()
- m[9].clone() * m[2].clone() * m[7].clone() - m[9].clone() * m[2].clone() * m[7].clone()
+ m[9].clone() * m[3].clone() * m[6].clone(); + m[9].clone() * m[3].clone() * m[6].clone();
out[(0, 1)] = -m[4].clone() * m[10].clone() * m[15].clone() out[(0, 1)] = -m[4].clone() * m[10].clone() * m[15].clone()
+ m[4].clone() * m[11].clone() * m[14].clone() + m[4].clone() * m[11].clone() * m[14].clone()
+ m[8].clone() * m[6].clone() * m[15].clone() + m[8].clone() * m[6].clone() * m[15].clone()
- m[8].clone() * m[7].clone() * m[14].clone() - m[8].clone() * m[7].clone() * m[14].clone()
- m[12].clone() * m[6].clone() * m[11].clone() - m[12].clone() * m[6].clone() * m[11].clone()
+ m[12].clone() * m[7].clone() * m[10].clone(); + m[12].clone() * m[7].clone() * m[10].clone();
out[(1, 1)] = m[0].clone() * m[10].clone() * m[15].clone() out[(1, 1)] = m[0].clone() * m[10].clone() * m[15].clone()
- m[0].clone() * m[11].clone() * m[14].clone() - m[0].clone() * m[11].clone() * m[14].clone()
- m[8].clone() * m[2].clone() * m[15].clone() - m[8].clone() * m[2].clone() * m[15].clone()
+ m[8].clone() * m[3].clone() * m[14].clone() + m[8].clone() * m[3].clone() * m[14].clone()
+ m[12].clone() * m[2].clone() * m[11].clone() + m[12].clone() * m[2].clone() * m[11].clone()
- m[12].clone() * m[3].clone() * m[10].clone(); - m[12].clone() * m[3].clone() * m[10].clone();
out[(2, 1)] = -m[0].clone() * m[6].clone() * m[15].clone() out[(2, 1)] = -m[0].clone() * m[6].clone() * m[15].clone()
+ m[0].clone() * m[7].clone() * m[14].clone() + m[0].clone() * m[7].clone() * m[14].clone()
+ m[4].clone() * m[2].clone() * m[15].clone() + m[4].clone() * m[2].clone() * m[15].clone()
- m[4].clone() * m[3].clone() * m[14].clone() - m[4].clone() * m[3].clone() * m[14].clone()
- m[12].clone() * m[2].clone() * m[7].clone() - m[12].clone() * m[2].clone() * m[7].clone()
+ m[12].clone() * m[3].clone() * m[6].clone(); + m[12].clone() * m[3].clone() * m[6].clone();
out[(3, 1)] = m[0].clone() * m[6].clone() * m[11].clone() out[(3, 1)] = m[0].clone() * m[6].clone() * m[11].clone()
- m[0].clone() * m[7].clone() * m[10].clone() - m[0].clone() * m[7].clone() * m[10].clone()
- m[4].clone() * m[2].clone() * m[11].clone() - m[4].clone() * m[2].clone() * m[11].clone()
+ m[4].clone() * m[3].clone() * m[10].clone() + m[4].clone() * m[3].clone() * m[10].clone()
+ m[8].clone() * m[2].clone() * m[7].clone() + m[8].clone() * m[2].clone() * m[7].clone()
- m[8].clone() * m[3].clone() * m[6].clone(); - m[8].clone() * m[3].clone() * m[6].clone();
out[(0, 2)] = m[4].clone() * m[9].clone() * m[15].clone() out[(0, 2)] = m[4].clone() * m[9].clone() * m[15].clone()
- m[4].clone() * m[11].clone() * m[13].clone() - m[4].clone() * m[11].clone() * m[13].clone()
- m[8].clone() * m[5].clone() * m[15].clone() - m[8].clone() * m[5].clone() * m[15].clone()
+ m[8].clone() * m[7].clone() * m[13].clone() + m[8].clone() * m[7].clone() * m[13].clone()
+ m[12].clone() * m[5].clone() * m[11].clone() + m[12].clone() * m[5].clone() * m[11].clone()
- m[12].clone() * m[7].clone() * m[9].clone(); - m[12].clone() * m[7].clone() * m[9].clone();
out[(1, 2)] = -m[0].clone() * m[9].clone() * m[15].clone() out[(1, 2)] = -m[0].clone() * m[9].clone() * m[15].clone()
+ m[0].clone() * m[11].clone() * m[13].clone() + m[0].clone() * m[11].clone() * m[13].clone()
+ m[8].clone() * m[1].clone() * m[15].clone() + m[8].clone() * m[1].clone() * m[15].clone()
- m[8].clone() * m[3].clone() * m[13].clone() - m[8].clone() * m[3].clone() * m[13].clone()
- m[12].clone() * m[1].clone() * m[11].clone() - m[12].clone() * m[1].clone() * m[11].clone()
+ m[12].clone() * m[3].clone() * m[9].clone(); + m[12].clone() * m[3].clone() * m[9].clone();
out[(2, 2)] = m[0].clone() * m[5].clone() * m[15].clone() out[(2, 2)] = m[0].clone() * m[5].clone() * m[15].clone()
- m[0].clone() * m[7].clone() * m[13].clone() - m[0].clone() * m[7].clone() * m[13].clone()
- m[4].clone() * m[1].clone() * m[15].clone() - m[4].clone() * m[1].clone() * m[15].clone()
+ m[4].clone() * m[3].clone() * m[13].clone() + m[4].clone() * m[3].clone() * m[13].clone()
+ m[12].clone() * m[1].clone() * m[7].clone() + m[12].clone() * m[1].clone() * m[7].clone()
- m[12].clone() * m[3].clone() * m[5].clone(); - m[12].clone() * m[3].clone() * m[5].clone();
out[(0, 3)] = -m[4].clone() * m[9].clone() * m[14].clone() out[(0, 3)] = -m[4].clone() * m[9].clone() * m[14].clone()
+ m[4].clone() * m[10].clone() * m[13].clone() + m[4].clone() * m[10].clone() * m[13].clone()
+ m[8].clone() * m[5].clone() * m[14].clone() + m[8].clone() * m[5].clone() * m[14].clone()
- m[8].clone() * m[6].clone() * m[13].clone() - m[8].clone() * m[6].clone() * m[13].clone()
- m[12].clone() * m[5].clone() * m[10].clone() - m[12].clone() * m[5].clone() * m[10].clone()
+ m[12].clone() * m[6].clone() * m[9].clone(); + m[12].clone() * m[6].clone() * m[9].clone();
out[(3, 2)] = -m[0].clone() * m[5].clone() * m[11].clone() out[(3, 2)] = -m[0].clone() * m[5].clone() * m[11].clone()
+ m[0].clone() * m[7].clone() * m[9].clone() + m[0].clone() * m[7].clone() * m[9].clone()
+ m[4].clone() * m[1].clone() * m[11].clone() + m[4].clone() * m[1].clone() * m[11].clone()
- m[4].clone() * m[3].clone() * m[9].clone() - m[4].clone() * m[3].clone() * m[9].clone()
- m[8].clone() * m[1].clone() * m[7].clone() - m[8].clone() * m[1].clone() * m[7].clone()
+ m[8].clone() * m[3].clone() * m[5].clone(); + m[8].clone() * m[3].clone() * m[5].clone();
out[(1, 3)] = m[0].clone() * m[9].clone() * m[14].clone() out[(1, 3)] = m[0].clone() * m[9].clone() * m[14].clone()
- m[0].clone() * m[10].clone() * m[13].clone() - m[0].clone() * m[10].clone() * m[13].clone()
- m[8].clone() * m[1].clone() * m[14].clone() - m[8].clone() * m[1].clone() * m[14].clone()
+ m[8].clone() * m[2].clone() * m[13].clone() + m[8].clone() * m[2].clone() * m[13].clone()
+ m[12].clone() * m[1].clone() * m[10].clone() + m[12].clone() * m[1].clone() * m[10].clone()
- m[12].clone() * m[2].clone() * m[9].clone(); - m[12].clone() * m[2].clone() * m[9].clone();
out[(2, 3)] = -m[0].clone() * m[5].clone() * m[14].clone() out[(2, 3)] = -m[0].clone() * m[5].clone() * m[14].clone()
+ m[0].clone() * m[6].clone() * m[13].clone() + m[0].clone() * m[6].clone() * m[13].clone()
+ m[4].clone() * m[1].clone() * m[14].clone() + m[4].clone() * m[1].clone() * m[14].clone()
- m[4].clone() * m[2].clone() * m[13].clone() - m[4].clone() * m[2].clone() * m[13].clone()
- m[12].clone() * m[1].clone() * m[6].clone() - m[12].clone() * m[1].clone() * m[6].clone()
+ m[12].clone() * m[2].clone() * m[5].clone(); + m[12].clone() * m[2].clone() * m[5].clone();
out[(3, 3)] = m[0].clone() * m[5].clone() * m[10].clone() out[(3, 3)] = m[0].clone() * m[5].clone() * m[10].clone()
- m[0].clone() * m[6].clone() * m[9].clone() - m[0].clone() * m[6].clone() * m[9].clone()
- m[4].clone() * m[1].clone() * m[10].clone() - m[4].clone() * m[1].clone() * m[10].clone()
+ m[4].clone() * m[2].clone() * m[9].clone() + m[4].clone() * m[2].clone() * m[9].clone()
+ m[8].clone() * m[1].clone() * m[6].clone() + m[8].clone() * m[1].clone() * m[6].clone()
- m[8].clone() * m[2].clone() * m[5].clone(); - m[8].clone() * m[2].clone() * m[5].clone();
let det = m[0].clone() * out[(0, 0)].clone()
+ m[1].clone() * out[(0, 1)].clone()
+ m[2].clone() * out[(0, 2)].clone()
+ m[3].clone() * out[(0, 3)].clone();
if !det.is_zero() {
let inv_det = T::one() / det; let inv_det = T::one() / det;
for j in 0..4 { for j in 0..4 {
@ -271,7 +296,5 @@ where
} }
} }
true true
} else {
false
} }
} }