using System; using System.Collections.Generic; using System.Linq; using System.Text; using Azimuth.Approximation; using Azimuth.SparseLinearAlgebra; using Azimuth.DenseLinearAlgebra; namespace Azimuth.UnitTests.SparseLinearAlgebra { public class ColleagueMatrixTests : UnitTestSharp.TestFixture { public void x0() { var coefficients = new DenseVector(new Scalar[] { }); var colleague = new ColleagueMatrix(coefficients); var roots = colleague.CalculateRealEigenvalues(); CheckEqual(new Scalar[] { }, roots); } public void x1() { var coefficients = new DenseVector(new Scalar[] { 1, }); var colleague = new ColleagueMatrix(coefficients); var roots = colleague.CalculateRealEigenvalues(); CheckEqual(new Scalar[] { }, roots); } public void x2() { var coefficients = new DenseVector(new Scalar[] { 2, 1, }); var colleague = new ColleagueMatrix(coefficients); var roots = colleague.CalculateRealEigenvalues(); CheckEqual(new Scalar[] { -1, }, roots); } public void x3() { var coefficients = new DenseVector(new Scalar[] { 2, 1, 1 }); var colleague = new ColleagueMatrix(coefficients); var roots = colleague.CalculateRealEigenvalues(); CheckEqual(new Scalar[] { -0.5, 0 }, roots); } public void x5() { var coefficients = new DenseVector(new Scalar[] { 2, 1, 1, 1, 1, }); var colleague = new ColleagueMatrix(coefficients); var roots = colleague.CalculateRealEigenvalues(); var expectedRoots = new List { Math.Sqrt(2) / 2, -Math.Sqrt(2) / 2, -.25 * (1 + Math.Sqrt(5)), -.25 * (1 - Math.Sqrt(5)) }; expectedRoots.Sort(); CheckEqual(expectedRoots, roots); } public void Quadratic() { Func f = x => 2 * x * x - 9 * x + 10; var cheby = new Chebyshev(f, new Interval(-10, 10)); var colleague = new ColleagueMatrix(cheby); var roots = colleague.CalculateRealEigenvalues(); var expected = new Scalar[] { 2/10.0, 5 / 2.0 / 10.0 }; CheckEqual(expected, roots); } } }