public void TestReflection() 
 {
   Poly cf = new Poly();
   NelderMead optim = new NelderMead(cf);
   
   DoubleVector[] simplex = new DoubleVector[3];
   simplex[0] = new DoubleVector(new double[2]{1,1});
   simplex[1] = new DoubleVector(new double[2]{1,-1});
   simplex[2] = new DoubleVector(new double[2]{2,0});
   
   optim.Rho = 1.5;
   optim.InitializeMethod(simplex);
   optim.IterateMethod();
   
   DoubleVector xr = (1+optim.Rho)*(new DoubleVector(new double[2]{1,0})) - optim.Rho*simplex[2];
   
   Assert.IsTrue(optim.LastStep == NelderMead.Step.Reflection);
   Assert.AreEqual(optim.Simplex[0][0],xr[0]);
   Assert.AreEqual(optim.Simplex[0][1],xr[1]);
 }
    public void TestShrink() 
    {
      Poly cf = new Poly();
      NelderMead optim = new NelderMead(cf);
      
      DoubleVector[] simplex = new DoubleVector[3];
      simplex[0] = new DoubleVector(new double[2]{1,1});
      simplex[1] = new DoubleVector(new double[2]{1,-1});
      simplex[2] = new DoubleVector(new double[2]{2,0});
      
      optim.Rho = 10;
      optim.Psi = 1.5;
      optim.InitializeMethod(simplex);
      optim.IterateMethod();

      Assert.IsTrue(optim.LastStep == NelderMead.Step.Shrink);
    }