C ++ быстрое лог-нормальное приближение cdf

В C ++ я хочу создать функцию, которая принимает вектор чисел в качестве входных данных и выводит вектор значений CDF. Следующее — моя попытка:

#include <boost/math/distributions/lognormal.hpp>

vector<double> lognormCDF(vector<double>& input, double sigma)
{
vector<double> output(input.size());
boost::math::lognormal lognormDistr(0, sigma);

for (size_t i = 0; i != input.size(); ++i)
{
output[i] = boost::math::cdf(lognormDistr, input[i]);
}

return output;
}

Приведенный выше код работает, но мне нужно, чтобы он был быстрее.

Ниже приведена справочная информация о том, как будет использоваться функция:

  • Входной вектор не отсортирован и всегда положительный.
  • Входной вектор обычно имеет длину от 250 до 500 элементов.
  • Значение сигмы может быть от 0,14 до 1,4
  • Выход CDF будет в диапазоне от 0,000001 до 0,999999
  • Выход CDF должен быть точным только с точностью до 0,000001

Мне просто интересно, есть ли более быстрый способ реализовать вышеизложенное?

Мне также интересно, если я сортирую входной вектор, есть ли более быстрый способ вычислить логнормальный выходной вектор CDF?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …