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; } }
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); } }