Ejemplo n.º 1
0
        public override List<double[]> CalcularMomentos()
        {
            //Declaração de variáveis
            List<double[]> momentos = new List<double[]>(); //Lista dos momentos. Cada momento varia com o tempo.
            List<double[]> momentosModificados = new List<double[]>(); //Lista dos momentos. Cada momento varia com o tempo.
            Passos = new double[numeroDePassos];
            Pesos = new List<double[]>();
            Abscissas = new List<double[]>();

            FuncaoDeIntegracao funcaoDeIntegracao = new Funcao(MetodoDeCoeficientes,termoFonteQMoM,DecorarAbscissas,DecorarPesos,funcaoDeltaAbscissas);
            RungeKutta4Ordem rungeKutta4Ordem = new RungeKutta4Ordem(passo,funcaoDeIntegracao);

            //0 - Calcula os momentos iniciais
            double[] m0;

            if (MomentosIniciais == null)
            {
                m0 = CalcularMomentosIniciais(MetodoDeCoeficientes);
                MomentosIniciais = m0;
            }
            else
                m0 = MomentosIniciais;

            //1 - Atribui o passo e os momentos iniciais
            momentosModificados.Add(m0);
            momentos.Add(m0);
            Passos[0] = passoInicial;

            //2 - Calcula os pesos e abscissas iniciais
            double[] pesos;
            double[] abscissas;

            CalcularPesosEAbscissas(MetodoDeCoeficientes, m0, out pesos, out abscissas);
            Pesos.Add(pesos);
            Abscissas.Add(abscissas);

            //3 - Faz o cálculo dos demais momentos
            for (int t = 1; t < numeroDePassos; t++)
            {
                Passos[t] = Passos[t - 1] + passo;
                double[] m = rungeKutta4Ordem.CalcularVariavelNoProximoPasso(t, momentosModificados[t - 1]);

                CalcularPesosEAbscissas(MetodoDeCoeficientes, m, out pesos, out abscissas);
                Pesos.Add(pesos);
                Abscissas.Add(abscissas);

                double[] mNorm = new double[m.Length];

                for (int i = 0; i < m.Length; i++)
                {
                    mNorm[i] = CalcularMomento(MetodoCoeficientesDosMomentos.PDA, pesos, abscissas, funcaoDeltaAbscissas, i);
                }

                momentos.Add(mNorm);
                momentosModificados.Add(m);
            }

            return momentos;
        }
Ejemplo n.º 2
0
 public DQMoM(int numeroDePassos, double passo, double passoInicial, int numeroDePontos,
     Integral.Funcao funcao, double limiteMinimo, double limiteMaximo, TermoFonteDQMoM termoFonteDQMoM)
     : base(numeroDePassos, passo, passoInicial, numeroDePontos, funcao,
     limiteMinimo, limiteMaximo)
 {
     this.termoFonteDQMoM = termoFonteDQMoM;
     numericalRecipes = new NumericalRecipes();
     FuncaoDeIntegracao funcaoDeIntegracao = new Funcao(numericalRecipes, numeroDePontos, MetodoDeCoeficientes, termoFonteDQMoM, DecorarAbscissas,
         DecorarPesos, funcaoDeltaAbscissas);
     rungeKutta4Ordem = new RungeKutta4Ordem(passo, funcaoDeIntegracao);
 }
Ejemplo n.º 3
0
 public new void Dispose()
 {
     numericalRecipes = null;
     rungeKutta4Ordem = null;
     base.Dispose();
 }