public void CalcularRungeKutta4OrdemTeste()
        {
            double passo = 0.2;
            int numeroDePassos = 6;
            double[] y0 = new[] { 1.0 };
            FuncaoDeIntegracao funcaoDeIntegracao = new FuncaoDeY(Potencia);

            RungeKutta4Ordem rungeKutta = new RungeKutta4Ordem(passo, funcaoDeIntegracao);

            double[] yEsperado = { 1.00000, 0.83334, 0.71429, 0.62501, 0.55556, 0.50000 };

            List<double[]> yCalculado = new List<double[]> { y0 };

            for (int i = 1; i < numeroDePassos; i++)
            {
                yCalculado.Add(rungeKutta.CalcularVariavelNoProximoPasso(yCalculado[i - 1]));
            }

            for (int i = 0; i < numeroDePassos; i++)
            {
                for (int j = 0; j < y0.Length; j++)
                {
                    Assert.AreEqual(yEsperado[i], yCalculado[i][j], 1e-5);
                }
            }
        }
        public void CalcularRungeKutta4OrdemMultidimensionalTeste()
        {
            double passo = 0.1;
            int numeroDePassos = 100;
            double[] y0 = new double[] { 1.0, 0.0 };
            double x0 = 0.0;
            FuncaoDeIntegracao funcao = new FuncaoDeY(YTrocado);

            RungeKutta4Ordem rungeKutta = new RungeKutta4Ordem(passo, funcao);

            List<double[]> yEsperado = new List<double[]> { y0 };

            double[] x = new double[numeroDePassos];
            x[0] = x0;

            for (int i = 1; i < numeroDePassos; i++)
            {
                double[] yLinhaEsperado = new double[y0.Length];
                x[i] = x[i - 1] + passo;

                yLinhaEsperado[0] = Math.Cosh(x[i]);
                yLinhaEsperado[1] = Math.Sinh(x[i]);

                yEsperado.Add(yLinhaEsperado);
            }

            List<double[]> yCalculado = new List<double[]> { y0 };

            for (int i = 1; i < numeroDePassos; i++)
            {
                yCalculado.Add(rungeKutta.CalcularVariavelNoProximoPasso(yCalculado[i - 1]));
            }

            for (int i = 0; i < numeroDePassos; i++)
            {
                for (int j = 0; j < y0.Length; j++)
                {
                    Assert.AreEqual(yEsperado[i][j], yCalculado[i][j], yEsperado[i][j] / 1000);
                }
            }
        }