Привет, я переписываю скрипт из MATLAB в C ++, используя библиотеку armadillo
для линейной алгебры и матрицы.
для получения более или менее того же результата, который я назвал методом cout:
cout.precision(4);
cout.setf(ios::fixed);
но я получаю другой результат:
Результат Matlab:
0.0000 0.0000 0.0000 0.0000 0.0000
0.0012 0.0014 0.0016 0.0020 0.0281
0.0396 0.0297 0.0297 0.0495 0.0976
Armadillo c ++ результат:
0.0000 0.0000 0.0000 0.0000 0.0000
0.0012 0.0014 0.0016 0.0020 0.0282
0.0416 0.0312 0.0312 0.0520 0.1027
сейчас, я не знаю, еслиЭта небольшая неточность (0.039
близка к 0.041
) вызвана некоторыми ошибками в моем переведенном коде C ++, или их следует считать нормальными различиями между двойной точностью в g ++ и MATLAB
В моем коде яиспользуя много циклов, как это:
xi_summed = xi_summed + normalise((trans % (alpha.col(t) * b.t())));
, где xi_summed
, trans
, alpha
, b
равны arma::mat
, а %
- поэлементное умножение и mat::t()
транспонировать и нормализовать функцию, которая делает записи матрицы A
сумма массива 1
.