public static double MFactorUniversalCarbonPlus(List<MFUCPData> matrixStateData, MFUCPData currentStateData) { const int nFeatures = 3; int nFeaturesCoefficcients; int info = 0; var inVector = new double[matrixStateData.Count, nFeatures + 1]; double[] coefficcients; var lm = new alglib.linearmodel(); var lr = new alglib.lrreport(); int lenghtData = matrixStateData.Count; for (int item = 0; item < lenghtData; item++) { inVector[item, 0] = matrixStateData[item].TimeFromX; // X1 inVector[item, 1] = matrixStateData[item].CarbonVP; // X2 inVector[item, 2] = matrixStateData[item].CarbonIVP; // X3 inVector[item, 3] = matrixStateData[item].SteelCarbonPercent; // Y } alglib.lrbuild(inVector, lenghtData, nFeatures, out info, out lm, out lr); if (info != 1) { return info; } alglib.lrunpack(lm, out coefficcients, out nFeaturesCoefficcients); if (nFeaturesCoefficcients != nFeatures) { return -2.011; } double calculatedCarbon = coefficcients[3]; calculatedCarbon += coefficcients[0] * currentStateData.TimeFromX; calculatedCarbon += coefficcients[1] * currentStateData.CarbonVP; calculatedCarbon += coefficcients[2] * currentStateData.CarbonIVP; return calculatedCarbon; }
public static void Reset() { CurrentState = new MFUCPData(); HDSmoother = new HeatDataSmoother(); ModelIsStarted = false; m_dataIsFixed = false; m_dataIsEnqueue = false; m_isBadInitBlowinByCO = false; m_isBlowingUpliftLance = false; Console.WriteLine("Reset"); IntegralCO = 0; IntegralCO2 = 0; OffGasV = 320001; m_lastCarbon = 0; m_previousCarbon = Double.MaxValue; HeatIsStarted = false; }
public static bool VerifiDataForSave(MFUCPData currentHeatResult) { const double minCarbonPercent = 0.03; const double maxCarbonPercent = 0.12; return (currentHeatResult.SteelCarbonPercentCalculated != 0) && (currentHeatResult.SteelCarbonPercent > minCarbonPercent) && (currentHeatResult.SteelCarbonPercent < maxCarbonPercent) && (currentHeatResult.HightQualityHeat); }
public static void HardFixData(MFUCPData hDataResult) { if (VerifiDataForSave(hDataResult)) { //m_matrix.RemoveAt(0); //m_matrix.Add(hDataResult); //m_matrix.Insert(); const double epsilon = 0.005; var isFoundInMatrix = false; for (int i = 0; i < m_matrix.Count; i++) { if (Math.Abs(m_matrix[i].SteelCarbonPercent - hDataResult.SteelCarbonPercent) < epsilon) { m_matrix.RemoveAt(i); m_matrix.Insert(i, hDataResult); isFoundInMatrix = true; break; } } if (isFoundInMatrix) InstantLogger.log("hDataResult.SteelCarbonPercent is found in m_matrix and replased"); else InstantLogger.err("hDataResult.SteelCarbonPercent = {0} not found in m_matrix", hDataResult.SteelCarbonPercent); } else hDataResult.HightQualityHeat = false; m_matrixTotal.Add(hDataResult); Program.SaveMatrix(Program.MatrixPath, m_matrix); Program.SaveMatrix(Program.MatrixTotalPath, m_matrixTotal); }