public void SimplyMeasurement_Ok() { //Arrange Measurement m = new Measurement(); DataMeasurement dM = new DataMeasurement(); Mic c1 = new Mic(); Mic c2 = new Mic(); FRF m1 = new FRF(); FRF m2 = new FRF(); FFT m3 = new FFT(); FFT m4 = new FFT(); //Act c1.Time = 0; c1.Pressure = -1.47F; c2.Time = 0; c2.Pressure = 0.59F; m1.Frequency = 0; m1.Amplification = 0; m2.Frequency = 0; m2.Amplification = 0; m3.Frequency = 0; m3.Amplitude = 0; m4.Frequency = 0; m4.Amplitude = 0; dM.Id = 1; dM.C1 = c1; dM.C2 = c2; dM.M1 = m1; dM.M2 = m2; dM.M3 = m3; dM.M4 = m4; m.Id = new System.Guid(); m.Date = new System.DateTime(2019, 04, 08, 14, 45, 34); m.Temperature = 15; m.AtmosphericPressure = 0; m.Measurements.Add(dM); //Assert Assert.AreEqual(1, m.Measurements.Count); Assert.AreEqual(0, m.Measurements.First().M3.Frequency); Assert.AreEqual(-1.47F, m.Measurements.First().C1.Pressure); }
private List <FRF[]> GettingRegionReference(FRF[] vClose_ref) { List <FRF[]> _target = new List <FRF[]>(); for (int i = 0; i < FrequencyRange.Count; i++) { List <FRF> aux = new List <FRF>(); for (int data = 0; data < vClose_ref.Length; data++) { if (vClose_ref[data].Freq >= FrequencyRange[i].MinValue && vClose_ref[data].Freq <= FrequencyRange[i].MaxValue) { FRF target = new FRF(); target = vClose_ref[data]; aux.Add(target); } } _target.Add((FRF[])aux.ToArray().Clone()); } return(_target); }
private double CostFucntion(double[] parameters) { FRF[] Struct_sim = new FRF[FormMain.Struct_ref.Length]; List <Mode> Modes = new List <Mode>(); Modes.Add(new Mode { Freq = VLoopModes[0].Freq, Zeta = VLoopModes[0].Zeta, Mass = VLoopModes[0].Mass }); for (int i = 0; i < 3; i++) { Mode mode = new Mode(); mode.Freq = parameters[0 + i * 3]; mode.Zeta = parameters[1 + i * 3]; mode.Mass = parameters[2 + i * 3]; Modes.Add(mode); } double errorMag = 0; double errorPhs = 0; for (int i = 0; i < FormMain.Struct_ref.Length; i++) { Complex Res = Tool.GetStructureResponse(FormMain.Struct_ref[i].Freq, Modes, "Velocity"); Struct_sim[i] = new FRF(FormMain.Struct_ref[i].Freq, Res); if (Struct_sim[i].Freq > RangeEvaluation.MinValue && Struct_sim[i].Freq < RangeEvaluation.MaxValue) { errorMag = Math.Pow(Struct_sim[i].Mag - FormMain.Struct_ref[i].Mag, 2) + errorMag; errorPhs = Math.Pow(Struct_sim[i].Phs - FormMain.Struct_ref[i].Phs, 2) + errorPhs; } } return(errorMag); }
//>>>>Here RUN Gradient Descent private void GradientDescentOptimization() { IsThereDataAvailable = false; double[] InitialParameters = new double[(VLoopModes.Count - 1) * 3]; InitialParameters = GettingInitialValues(); double[] LearningRate = new double[InitialParameters.Length]; for (int i = 0; i < InitialParameters.Length / 3; i++) { LearningRate[0 + i * 3] = TryToDouble(textBoxLRateFreq.Text); LearningRate[1 + i * 3] = TryToDouble(textBoxLRateZeta.Text); LearningRate[2 + i * 3] = TryToDouble(textBoxLRateMass.Text); } GD = new GradientDescent( InitialParameters, LearningRate, (int)TryToDouble(textBoxIterations.Text) ); GD.GD_Settings.Delta = TryToDouble(textBoxDelta.Text); GD.GD_Settings.Error = new Range { MaxValue = 0.0001, MinValue = 0 }; GD.Solve(CostFucntion); #region Writting Results textBoxOPFreq.Clear(); textBoxOPZeta.Clear(); textBoxOPMass.Clear(); for (int i = 0; i < GD.OPTResult.Parameters.Length / 3; i++) { textBoxOPFreq.Text = textBoxOPFreq.Text + " " + GD.OPTResult.Parameters[0 + i * 3].ToString("00.000"); textBoxOPZeta.Text = textBoxOPZeta.Text + " " + GD.OPTResult.Parameters[1 + i * 3].ToString("0.000"); textBoxOPMass.Text = textBoxOPMass.Text + " " + GD.OPTResult.Parameters[2 + i * 3].ToString("0.000"); } textBoxOPError.Text = GD.OPTResult.target[0].ToString(); #endregion IsThereDataAvailable = true; PlottingGAData(); newVLoopModes = new List <Mode>(); newVLoopModes.Add(new Mode { Freq = VLoopModes[0].Freq, Zeta = VLoopModes[0].Zeta, Mass = VLoopModes[0].Mass }); for (int i = 0; i < InitialParameters.Length / 3; i++) { Mode mode = new Mode(); mode.Freq = GD.OPTResult.Parameters[0 + i * 3]; mode.Zeta = GD.OPTResult.Parameters[1 + i * 3]; mode.Mass = GD.OPTResult.Parameters[2 + i * 3]; newVLoopModes.Add(mode); } FRF[] Struct_sim = new FRF[FormMain.Struct_ref.Length]; for (int i = 0; i < FormMain.Struct_ref.Length; i++) { Complex Res = Tool.GetStructureResponse(FormMain.Struct_ref[i].Freq, newVLoopModes, "Velocity"); Struct_sim[i] = new FRF(FormMain.Struct_ref[i].Freq, Res); } FormMain.DrawResult(Struct_sim); }