/// <summary> /// Householder Reflection: Evaluate symmetric? unitary Q such that Q*v = -sigma*||v||*e1 /// </summary> public static ComplexMatrix Reflection(ComplexVector v) { Complex sigma = v[0].Sign; ComplexVector u = v.Clone(); u[0] += sigma * v.Norm(); ComplexMatrix m = ComplexMatrix.Identity(v.Length, v.Length); m.MultiplyAccumulateInplace(u.TensorMultiply(u), -2d / u.ScalarMultiply(u)); return m; }
/// <summary> /// Householder Reflection: Evaluate symmetric? unitary Q such that Q*v = -sigma*||v||*e1 /// </summary> public static ComplexMatrix Reflection(ComplexVector v) { Complex sigma = v[0].Sign; ComplexVector u = v.Clone(); u[0] += sigma * v.Norm(); ComplexMatrix m = ComplexMatrix.Identity(v.Length, v.Length); m.MultiplyAccumulateInplace(u.TensorMultiply(u), -2d / u.ScalarMultiply(u)); return(m); }
public void TestAlmostEquals_ComplexVector() { ComplexVector a1 = ComplexVector.Random(3, new ContinuousUniformDistribution()); ComplexVector a2 = a1.Clone(); ComplexVector b = -a1; ComplexVector c = a1 * (1.0 + (1e+10 * Number.PositiveEpsilonOf(1.0))); ComplexVector d = a1 * (1.0 + (2 * Number.PositiveEpsilonOf(1.0))); Helper_TestAlmostEqualityForGenericType(a1, a2, b, c, d); // Wrapper Assert.That(ComplexVector.AlmostEqual(a1, c), Is.False); Assert.That(ComplexVector.AlmostEqual(a1, c, 1e-10), Is.False); Assert.That(ComplexVector.AlmostEqual(a1, c, 1e-2), Is.True); // reference type -> no boxing Assert.That(a1, Is.SameAs(a1)); }