예제 #1
0
        public void Adam2012Teste()
        {
            N = 70;

            double passo = 0.1;
            int npassos = Convert.ToInt32(2.0 / passo + 1);
            npassos = 5;

            kMax = 2.64;
            alfa = 0.35;
            Lmax = 69.5;
            Lmin = 1.0;

            x0 = 0.0;
            xf = kMax;

            Integral.Funcao bf = FuncaoBfAdam2012;
            Integral.Funcao an = FuncaoAnAdam2012;
            FixedPoint.FuncaoDupla fp = FuncaofpAdam2012;
            Integral.Funcao D = FuncaoDAdam2012;
            Integral.Funcao klinha = FuncaoklinhaAdam2012;
            Integral.Funcao funcaoIncial = FuncaoInicialAdam2012;

            autoQuad = new AutoQuad2(10, x0, xf, precisaoRequerida, 10);

            FixedPoint fixedPoint = new FixedPoint(N, x0, xf, bf, an, fp, D, funcaoIncial);

            //fixedPoint.PrepararFp = CalcularS0;

            CalcularS0(kMax);

            Stopwatch stopwatch = new Stopwatch();

            List<double[]> concentracao = new List<double[]>();

            stopwatch.Start();

            concentracao = fixedPoint.Calcular(npassos, passo);

            Trace.WriteLine(stopwatch.ElapsedMilliseconds);

            stopwatch.Stop();

            var fator = 1;

            CriarScripParaMatlabConcentracao(@"LaxminaraAdam2012\concentracao", fixedPoint.tempo,fixedPoint.x, concentracao, fator);
        }
예제 #2
0
        public void McCoyTeste()
        {
            N = 100;
            int npassos = 101;
            double passo = 0.1;

            x0 = 125.0;
            xf = 1200.0;

            Integral.Funcao bf = FuncaoBfMcCoy;
            Integral.Funcao an = FuncaoAnMcCoy;
            FixedPoint.FuncaoDupla fp = FuncaofpMcCoy;
            Integral.Funcao D = FuncaoDMcCoy;
            Integral.Funcao funcaoIncial = FuncaoMcCoy;

            FixedPoint fixedPoint = new FixedPoint(N, x0, xf, bf, an, fp, D, funcaoIncial);

            Stopwatch stopwatch = new Stopwatch();

            List<double[]> concentracao = new List<double[]>();

            stopwatch.Start();

            concentracao = fixedPoint.Calcular(npassos, passo);

            Trace.WriteLine(stopwatch.ElapsedMilliseconds);

            stopwatch.Stop();

            autoQuad = new AutoQuad2(10, x0, xf, precisaoRequerida, 15);

            int numeroDePontos = 6;
            var fator = Convert.ToInt32(1.0/passo);
            //var fator = 1;

            var momentosNumericos = new List<double[]>();

            var listaTempo = new List<double>();

            int contador = 0;

            var momentosIniciais = CalcularMomentosIniciaisMcCoy(numeroDePontos, FuncaoMcCoy);

            momentosNumericos.Add(momentosIniciais);

            for (int i = 1; i < fixedPoint.tempo.Length; i += fator)
            {
                contador++;

                var momentos = CalcularMomentos(numeroDePontos, concentracao[i], fixedPoint.x);

                momentosNumericos.Add(momentos);

                listaTempo.Add(contador);

            }

            List<double[]> momentosAnaliticos = CalcularMomentosAnaliticosMcCoy(fixedPoint.tempo, numeroDePontos, momentosIniciais, fator);

            CriarScripParaMatlabConcentracao(@"LaxminaraMcCoy\concentracao", fixedPoint.tempo,fixedPoint.x, concentracao, fator);
            CriarScripParaMatlabMomentos(@"LaxminaraMcCoy\momentos", "A", listaTempo.ToArray(), momentosAnaliticos, momentosNumericos, 1);
        }
예제 #3
0
        public void TestarBalancoDeMassaAdam2012()
        {
            autoQuad = new AutoQuad2(10, x0, xf, precisaoRequerida, 10);

            kMax = 2.64;
            alfa = 0.35;

            x0 = 0.0;
            xf = kMax;

            double xlinha = 1.64;

            CalcularS0(xlinha);

            Integral.Funcao funcao = delegate(double x)
            {
                double valor = FuncaofpAdam2012(x, xlinha) * D(x);

                return valor;
            };

            autoQuad.LimiteInferior = 0.0;
            autoQuad.LimiteSuperior = xlinha;

            double valorAutoquad;
            double valorComPrecisaoAutoquad;
            double precisaoAutoquad;
            if (!autoQuad.Calcular(funcao, out valorAutoquad, out valorComPrecisaoAutoquad, out precisaoAutoquad))
                throw new Exception("Erro no cálculo da AutoQuad");

            if (precisaoAutoquad > precisaoRequerida)
                Trace.Write("Precisão não foi atingida na AutoQuad");

            Assert.AreEqual(1.0, valorAutoquad, 0.00000001);
        }
예제 #4
0
        public void AtribuirCampos()
        {
            metodoDeCoeficientes = MomentosBase.MetodoCoeficientesDosMomentos.Wheeler;
            funcaoDeMomentoInicial = FuncaoDeMomentoInicial;
            autoQuad = new AutoQuad(10, 0.0, 1.0, precisaoRequerida, 10);
            autoQuadS0 = new AutoQuad2(10,0.0,1.0,precisaoRequerida,10);

            numeroDePontos = 5;
            deltaN = 2;

            numeroDePontosInicial = 5;
            deltaNInicial = 2;

            //Parâmetros da distribuição inicial
            x0 = 6.0;
            aP = 99.7373819939209;
            alfaGama = 2.11974361925893;
            beta = 8.60867323342265;

            Lmin = 6.0;
            Lmax = 69.5;

            limiteInferiorDistribuicao = Lmin;
            limiteSuperiorDistribuicao = Lmax;

            //Parâmetros do Hidrocraqueamento

            //Valores dos parâmetros para T = 324 C

            alfa = 0.5;

               // alfa = 0.35;
            kMax = 2.64; //1/hora;
            a0 = 8.14;
            a1 = 4.68;
            delta = 7.05e-07;

            //Valores dos parâmetros para T = 342 C

            //alfa = 0.40;
            //kMax = 8.08; //1/hora;
            //a0 = 6.00;
            //a1 = 3.80;
            //delta = 9.05e-07;

            //Valores dos parâmetros para T = 354 C

            //alfa = 0.314;
            //kMax = 32.08; //1/hora;
            //a0 = 5.82;
            //a1 = 3.60;
            //delta = 9.05e-07;

            funcaoEVezesPolinomio = FuncaoEVezesPolinomio;
        }