Д. Стефенс - C++. Сборник рецептов

Здесь есть возможность читать онлайн «Д. Стефенс - C++. Сборник рецептов» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: КУДИЦ-ПРЕСС, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

C++. Сборник рецептов: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «C++. Сборник рецептов»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Данная книга написана экспертами по C++ и содержит готовые рецепты решения каждодневных задач для программистов на С++. Один из авторов является создателем библиотеки Boost Iostreams и нескольких других библиотек C++ с открытым исходным кодом. В книге затрагивается множество тем, вот лишь некоторые из них: работа с датой и временем; потоковый ввод/вывод; обработка исключений; работа с классами и объектами; сборка приложений; синтаксический анализ XML-документов; программирование математических задач. Читатель сможет использовать готовые решения, а сэкономленное время и усилия направить на решение конкретных задач.

C++. Сборник рецептов — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «C++. Сборник рецептов», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать
Решение

Функцию accumulateиз заголовочного файла можно использовать для расчета многих статистических параметров, а не только для суммирования пользовательских объектов-функций. Пример 11.9 показывает, как можно вычислить значения некоторых важных статистические функций при помощи accumulate.

Пример 11.9. Статистические функции

#include

#include

#include

#include

#include

#include

using namespace std;

template

T nthPnwer(T x) {

T ret = x;

for (int i=1; i < N; ++i) {

ret *= x;

}

return ret;

}

template

struct SumDiffNthPower {

SumDiffNthPower(T x) : mean_(x) {};

T operator()(T sum, T current) {

return sum + nthPower(current - mean_);

}

T mean_;

};

template

T nthMoment(Iter_T first, Iter_T last, T mean) {

size_t cnt = distance(first, last);

return accumulate(first, last, T(), SumDiffNthPower(mean)) / cnt;

}

template

T computeVariance(Iter_T first, Iter_T last, T mean) {

return nthMoment(first, last, mean);

}

template

T computeStdDev(Iter_T first, Iter_T last, T mean) {

return sqrt(computeVariance(first, last, mean));

}

template

T computeSkew(Iter_T begin, Iter_T end, T mean) {

T m3 = nthMoment(begin, end, mean);

T m2 = nthMoment(begin, end, mean);

return m3 / (m2 * sqrt(m2));

}

template

T computeKurtosisExcess(Iter_T begin, Iter_T end, T mean) {

T m4 = nthMoment(begin, end, mean);

T m2 = nthMoment(begin, end, mean);

return m4 / (m2 * m2) - 3;

}

template

void computeStats(Iter_T first, Iter_T last, T& sum, T& mean,

T& var, T& std_dev, T& skew, T& kurt) {

size_t cnt = distance(first, last);

sum = accumulate(first, last, T());

mean = sum / cnt;

var = computeVariance(first, last, mean);

std_dev = sort(var);

skew = computeSkew(first, last, mean);

kurt = computeKurtosisExcess(first, last, mean);

}

int main() {

vector v;

v.push_back(2);

v.push_back(4);

v.push_back(8);

v.push_back(10);

v.push_back(99);

v.push_back(1);

double sum, mean, var, dev, skew, kurt;

computeStats(v.begin(), v.end(), sum, mean, var, dev, skew, kurt);

cout << "count = " << v.size() << "\n";

cout << "sum = " << sum << "\n";

cout << "mean = " << mean << "\n";

cout << "variance = " << var << "\n";

cout << "standard deviation = " << dev << "\n";

cout << "skew = " << skew << "\n";

cout << "kurtosis excess = " << kurt << "\n";

cout << endl;

}

Программа примера 11.9 выдает следующий результат

count = 6

sum = 124

mean = 20.6667

variance = 1237.22

standard deviation = 35.1742

skew = 1.75664

kurtosis excess = 1.14171

Обсуждение

Некоторые наиболее важные статистические функции (например, дисперсия, стандартное отклонение, коэффициент асимметрии и эксцесс) определяются исходя из нормализованных выборочных моментов. Статистические функции определяются немного по-разному в различных текстах. Здесь мы используем несмещенные определения статистических функций, которые сведены в табл. 11.1.

Табл. 11.1. Определения статистических функций

Статистическая функция Формула
n-й центральный момент (μ n) ∑(x i-mean) n
Дисперсия μ2
Стандартное отклонение √μ2
Коэффициент асимметрии μ2/μ3 3/2
Эксцесс (μ4/μ2²)-3

картинка 64Момент характеризует последовательность чисел. Другими словами, он определяет некий способ математического описания последовательности чисел. Моменты являются основой для расчета нескольких важных статистических функций, например дисперсии, стандартного отклонения, коэффициента асимметрии и эксцесса. Центральный момент — это момент, рассчитанный относительно среднего значения, а не нуля. Выборочный момент — это момент, рассчитанный для дискретного набора числовых значений, а не для всех значений функции. Нормализованный момент — это момент, поделенный на некоторую степень стандартного отклонения (стандартное отклонение рассчитывается как квадратный корень второго момента).

Проще всего программировать статистические функции, определяя их через моменты. Поскольку используется несколько различных моментов, каждый из которых характеризуется целочисленной константой, я передаю эту константу как параметр шаблона. Это в целом позволяет компилятору генерировать более эффективный программный код, потому что это целочисленное значение известно на этапе компиляции.

Функция момента определяется при помощи математического оператора суммы. Во всех случаях, когда речь идет об этом операторе, следует иметь в виду функцию accumulate, определенную в заголовочном файле . Существует две разновидности функции accumulate: одна подсчитывает сумму, используя operator+, а другая использует функтор суммирования, который вы должны предоставить. Ваш функтор суммирования будет принимать значение накопленной суммы и значение конкретного элемента последовательности.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «C++. Сборник рецептов»

Представляем Вашему вниманию похожие книги на «C++. Сборник рецептов» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «C++. Сборник рецептов»

Обсуждение, отзывы о книге «C++. Сборник рецептов» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.