setMatrix([ [12, -51, 4], [6, 167, -68], [-4, 24, -41], ]); $QR = new QRDecomposition($A); self::assertTrue($QR->isFullRank()); self::assertEquals([ [-6 / 7, 69 / 175, 58 / 175], [-3 / 7, -158 / 175, -6 / 175], [2 / 7, -6 / 35, 33 / 35], ], $QR->getQ()->toArray(), '', 0.2); self::assertEquals([ [-14, -21, 14], [0, -175, 70], [0, 0, -35], ], $QR->getR()->toArray(), '', 0.2); self::assertEquals($A->toArray(), $QR->getQ()->mult($QR->getR()), '', 0.2); self::assertEquals([ [12, -69, -58 / 5], [6, 158, 6 / 5], [-4, 30, -33], ], $QR->getH()->toArray(), '', 0.2); } public function testSolve() { $A = new Matrix(); $A->setMatrix([ [25, 15, -5], [15, 17, 0], [-5, 0, 11], ]); $QR = new QRDecomposition($A); $vec = new Vector(); $vec->setMatrix([[40], [49], [28]]); self::assertEquals([[1], [2], [3]], $QR->solve($vec)->toArray(), '', 0.2); } }