public static void rotate12(SMat3 vtav, Mat3 v) { if (vtav.m12 == 0) { return; } float c = 0, s = 0; Schur2.rot12(vtav, c, s); Givens.rot12_post(v, c, s); }
public static void rotate01(SMat3 vtav, Mat3 v) { if (vtav.m01 == 0) { return; } float c = 0, s = 0; Schur2.rot01(vtav, c, s); Givens.rot01_post(v, c, s); }
public static void Rotate01(SMat3 vtav, Mat3 v) { if (vtav.m01 == 0) { return; } double c = 0, s = 0; Schur2.Rot01(vtav, c, s); Givens.Rot01Post(v, c, s); }
public static void Rotate12(SMat3 vtav, Mat3 v) { if (vtav.m12 == 0) { return; } double c = 0, s = 0; Schur2.Rot12(vtav, c, s); Givens.Rot12Post(v, c, s); }
public static void getSymmetricSvd(SMat3 a, out SMat3 vtav, out Mat3 v, float tol, int max_sweeps) { vtav = new SMat3(); v = new Mat3(); vtav.setSymmetric(a); v.set(1, 0, 0, 0, 1, 0, 0, 0, 1); float delta = tol * MatUtils.fnorm(vtav); for (int i = 0; i < max_sweeps && MatUtils.off(vtav) > delta; ++i) { Schur2.rotate01(out vtav, out v, vtav, v); Schur2.rotate02(out vtav, out v, vtav, v); Schur2.rotate12(out vtav, out v, vtav, v); } }