From a666dc0fb4cfd74eeb23d8cea876546859b3c42b Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Mon, 12 Jun 2017 11:01:42 +0200 Subject: [PATCH] require at least 2 points for extrapolation --- .../ComponentData/TransmissionLossMapReader.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs index 52fe2f09a4..0d95a4d4cf 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs @@ -87,10 +87,16 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData return new TransmissionLossMap(entries, gearRatio, gearName); } var orig = ""; - entries.ForEach(x =>orig +=string.Format("{0},{1},{2}" + Environment.NewLine, x.InputSpeed.AsRPM, x.InputTorque.Value(), x.TorqueLoss.Value())); + entries.ForEach( + x => + orig += + string.Format("{0},{1},{2}" + Environment.NewLine, x.InputSpeed.AsRPM, x.InputTorque.Value(), x.TorqueLoss.Value())); entries = ExtendLossMap(entries); var extended = ""; - entries.ForEach(x => extended += string.Format("{0},{1},{2}" + Environment.NewLine, x.InputSpeed.AsRPM, x.InputTorque.Value(), x.TorqueLoss.Value())); + entries.ForEach( + x => + extended += + string.Format("{0},{1},{2}" + Environment.NewLine, x.InputSpeed.AsRPM, x.InputTorque.Value(), x.TorqueLoss.Value())); return new TransmissionLossMap(entries, gearRatio, gearName); } @@ -121,12 +127,13 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData } var torqueStep = 500.SI<NewtonMeter>(); foreach (var speedBucket in speedBuckets) { - if (speedBucket.Value.Count == 0) + if (speedBucket.Value.Count < 2) { continue; + } double k, d, r; VectoMath.LeastSquaresFitting(speedBucket.Value, x => x.InputTorque.Value(), x => x.TorqueLoss.Value(), out k, out d, out r); - + for (var inTq = speedBucket.Value.Max(x => x.InputTorque) + torqueStep; inTq <= 2 * maxTorque; inTq += torqueStep) { entries.Add(new TransmissionLossMap.GearLossMapEntry(speedBucket.Key, inTq, k * inTq + d.SI<NewtonMeter>())); entries.Add(new TransmissionLossMap.GearLossMapEntry(speedBucket.Key, -inTq, k * inTq + d.SI<NewtonMeter>())); -- GitLab