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; }
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); }
public new void Dispose() { numericalRecipes = null; rungeKutta4Ordem = null; base.Dispose(); }