コード例 #1
0
        private void ShowCalculatedValues()
        {
            DadosEntrada dados = DataEntry();

            if (dados != null)
            {
                Calculos calc = new Calculos();


                DataSet   dsDln       = new DataSet();
                DataTable tabCalculos = new DataTable();
                tabCalculos.Columns.Add("Hora", typeof(double));
                tabCalculos.Columns.Add("IluminanciaCC_H", typeof(double));
                tabCalculos.Columns.Add("IluminanciaPE_H", typeof(double));
                tabCalculos.Columns.Add("IluminanciaCE_H", typeof(double));
                tabCalculos.Columns.Add("IluminanciaCC_V", typeof(double));
                tabCalculos.Columns.Add("IluminanciaPE_V", typeof(double));
                tabCalculos.Columns.Add("IluminanciaCE_V", typeof(double));
                tabCalculos.Columns.Add("LuminanciaCC", typeof(double));
                tabCalculos.Columns.Add("LuminanciaPE", typeof(double));
                tabCalculos.Columns.Add("LuminanciaCE", typeof(double));


                for (int hora = 6; hora < 19; hora++)
                {
                    calc.Calcula(dados, hora);
                    DataRow linha = tabCalculos.NewRow();
                    linha["Hora"] = hora;

                    linha["IluminanciaCC_H"] = calc.Resultados.IluminanciaCC_H;
                    linha["IluminanciaPE_H"] = calc.Resultados.IluminanciaPE_H;
                    linha["IluminanciaCE_H"] = calc.Resultados.IluminanciaCE_H;

                    linha["IluminanciaCC_V"] = calc.Resultados.IluminanciaCC_V;
                    linha["IluminanciaPE_V"] = calc.Resultados.IluminanciaPE_V;
                    linha["IluminanciaCE_V"] = calc.Resultados.IluminanciaCE_V;

                    linha["LuminanciaCC"] = calc.Resultados.LuminanciaCC;
                    linha["LuminanciaPE"] = calc.Resultados.LuminanciaPE;
                    linha["LuminanciaCE"] = calc.Resultados.LuminanciaCE;
                    tabCalculos.Rows.Add(linha);
                }
                dataGridViewDln.DataSource = tabCalculos;
            }
        }
コード例 #2
0
        public bool Calcula(ref string mensagemErro)
        {
            try
            {
                if (DataInicial > DataFinal)
                {
                    mensagemErro = "Final date before start.";
                    return(false);
                }
                int maxDay = 365;
                if ((DateTime.IsLeapYear(DataInicial.Year) && DataInicial.Month <= 2) ||
                    (DateTime.IsLeapYear(DataFinal.Year) && DataFinal.Month >= 3))
                {
                    maxDay = 366;
                }
                if ((DataFinal.Subtract(DataInicial)).TotalDays > maxDay)
                {
                    mensagemErro = "Maximum one year for typical day calculation.";
                    return(false);
                }

                Calculos calc = new Calculos();
                _totalDiasCalculados = 0;
                _listaResultados     = new List <Resultados>();
                for (DateTime data = DataInicial; data <= DataFinal; data = data.AddDays(1))
                {
                    Dados.Data = data;
                    EnviaMensagem("Calculating " + data.ToString("dd - MMM"));
                    for (int hour = Program.objParametros.StartTime; hour <= Program.objParametros.EndTime; hour++)
                    {
                        Dados.horas = hour;
                        calc.Calcula(Dados, hour);
                        _listaResultados.Add(calc.Resultados);
                    }
                    _totalDiasCalculados++;
                }

                // Calculate each time average in the period
                List <Resultados> averageResult = new List <Resultados>();
                for (int hour = Program.objParametros.StartTime; hour <= Program.objParametros.EndTime; hour++)
                {
                    List <Resultados> hourResult    = _listaResultados.FindAll(delegate(Resultados r) { return(r.Hora == hour); });
                    Resultados        resultAverage = new Resultados();
                    foreach (Resultados result in hourResult)
                    {
                        resultAverage.Adiciona(result);
                    }
                    resultAverage.CalculaMedia(_totalDiasCalculados);
                    averageResult.Add(resultAverage);
                }

                // Calculate moda: real day close to average result
                double smallDtandardDeviation = double.MaxValue;
                for (DateTime data = DataInicial; data <= DataFinal; data = data.AddDays(1))
                {
                    Dados.Data = data;
                    EnviaMensagem("Recalculating " + data.ToString("dd - MMM"));
                    double varianceCC = 0, variancePE = 0, varianceCE = 0;
                    for (int hour = Program.objParametros.StartTime; hour <= Program.objParametros.EndTime; hour++)
                    {
                        Dados.horas = hour;
                        calc.Calcula(Dados, hour);
                        Resultados hourResult = averageResult.Find(delegate(Resultados r) { return(r.Hora == hour); });

                        double Aux = calc.Resultados.TotalLightCC - hourResult.TotalLightCC;
                        varianceCC += (Aux * Aux);

                        Aux         = calc.Resultados.TotalLightPE - hourResult.TotalLightPE;
                        variancePE += (Aux * Aux);

                        Aux         = calc.Resultados.TotalLightCE - hourResult.TotalLightCE;
                        varianceCE += (Aux * Aux);
                    }
                    double standardDeviationCC = Math.Sqrt(varianceCC);
                    double standardDeviationPE = Math.Sqrt(variancePE);
                    double standardDeviationCE = Math.Sqrt(varianceCE);

                    // Using only standard CC deviation to choose typical day
                    if (standardDeviationCC < smallDtandardDeviation)
                    {
                        smallDtandardDeviation = standardDeviationCC;
                        TypicalDay             = data;
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                TypicalDay   = DateTime.MinValue;
                mensagemErro = "Erro em CalculaPeriodo.Calcula: " + ex.Message;
                return(false);
            }
        }