Как я уже говорил в вашем последнем вопросе, используйте анализ единиц, чтобы найти свои ошибки . Тогда это был хороший совет, и теперь это хороший совет.
Давайте рассмотрим ваш метод:
public static int Normalize(
double n_bins,
double mu,
double sigma,
double gaussian)
Возвращает индекс бина, поэтому это должно быть целое число.
Требуется количество бинов; это должно быть целое число, а не двойное. Это не физическая величина.
Что такое му? Это средство распределения. Какое распределение? Скорость. Итак, у мю есть единицы метров в секунду.
Что такое сигма? Это стандартное отклонение распределения скоростей, поэтому оно также имеет единицы измерения метров в секунду.
Что такое гауссов? Это образец из распределения, поэтому он также имеет единицы метров в секунду.
Но в вашем звонке:
Normalization.Normalize(binsCount, mass, T, gauss);
Вы прошли счетчик бинов - это правильно.
Вы прошли массу - мы ожидаем метров в секунду, и вы прошли килограммы, так что это не может быть правильным.
Вы прошли температуру - мы ожидаем метров в секунду, и вы прошли Кельвин, так что это не может быть правильным.
И вы прошли образец, так что это правильно.
То, что вы должны пройти, это средняя скорость , которую вы рассчитали в своем последнем ответе, и стандартное отклонение скорости, которое вы оценили, потому что у вас есть известное стандартное отклонение одного компонента скорости, и этого достаточно угадайте.
Опять же: Единичный анализ - мощный инструмент для поиска ошибок . Я sh C# упростила назначение единиц в двойники; такого рода проблемы будут затем обнаружены компилятором. У F # есть эта особенность, и это очень приятно.
ОБНОВЛЕНИЕ: до меня дошло, что оригинальный плакат не понимает, что я имею в виду под анализом единицы .
Единичный анализ - это метод связывания «типа» с каждой величиной в физической задаче, а затем отслеживание этого типа в рамках задачи. Если в какой-то момент вы обнаружите, что у вас есть «перепутанные» типы, вы знаете, что есть проблема.
Основными c правилами анализа единиц являются только единицы сумма с идентичные единицы и единицы умножают и делят , используя стандартные правила умножения и деления.
Например, предположим, что у нас есть некоторые количества: 10 килограмм, 5 метров, 2 секунды. Предположим, мы умножаем килограммы на метры и делим на секунды; импульс объекта, масса которого 10 кг движется со скоростью 5 метров за 2 секунды, составляет 25 килограмм в секунду .
Если позже в нашей задаче у нас будет количество, скажем, энергия и мы добавляем импульс энергии по ошибке , наш анализ единиц говорит нам, что это неправильно. 25 kg*m/s
нельзя добавить к чему-либо, у кого есть единицы энергии , потому что у энергии есть единицы kg*m*m/(s*s)
, и поэтому мы знаем, что где-то допустили ошибку.
Аналогично, в предыдущем В вопросе я отметил, что мы можем использовать анализ единиц, чтобы определить, когда мы делаем вычисления в граммах, но мы ожидаем, что значение в килограммах. В этом случае, по крайней мере, у нас есть две вещи, которые обе являются массовыми, но использование граммов, когда ожидаются килограммы, является серьезной ошибкой, и модульный анализ может обнаружить эту проблему.
Это особенно полезно в программировании, поскольку мы только что увидели, что очень легко ошибиться, если у вас есть метод, который использует скорость, а вы передаете ей температуру, которая не имеет смысла. Это была просто удача, что 300K, значение, которое вы указали для скорости, оказалось на правильном уровне, поскольку 300 м / с - это также разумная скорость для молекулы азота. Но это была удача . Правильнее всего выяснить, с какой скоростью нужно двигаться.