В стандартной библиотеке есть инструменты для генерации значений из одномерного нормального распределения (std::normal_distribution). Есть ли подобное для многомерного нормального распределения? Если нет, то есть ли в бусте?
Математический алгоритм:
Ay[i,j]=Ax[i,j]-m[i]*m[j]E=EigenVectors(Ay).Az = E * Ay * E^-1. В этой системе координат, матрица Az должна быть диагональной.В случае, если нужно сгенерировать много случайных чисел, то шаги 1-4 можно выполнить один раз.
Критическим здесь является являестя этап нахиждения собственных векторов. К сожелению, в boost.uBLAS, нет подходящей функции, но можно воспользоваться eigen или MKL. Кроме того, задача нахождения собственных векторов - очень трудоемкая (сложенее нахождения обратной матрицы), и в случае плохо обусловленных матриц большого размера, удовлетворительного алгоритма просто не сущесвует. Даже размерность 10 может оказаться критической, с точки зрения потери точности.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости