Броненосец C++: невозможно записать двумерный массив с плавающей точкой в формат
У меня есть 2-х плавающий 2D-массив и 1D-массив. Я хочу создать переменную fmat и записать в нее 2D-массив, а затем 1D-вектор, а затем решить его, используя метод исключения Гаусса. Когда я пытаюсь записать 2d Array в переменную, я получил результат: [matrix 1:0]
в другой ошибке сегментации
fmat A;
for(int i=0; i<elements+1; ++i)
{
for(int j=0; j<elements+1; ++j)
A << globalMatrix[i][j];
A << endr;
}
cout<<"MATRIX\n\n";
A.print();
fvec B(elements+1);
for(int i=0;i<elements+1;++i)
B=loadVec[i];
cout<<B;
1 ответ
Решение
fmat
класс не является потоком, поэтому вы не можете использовать <<
операция в цикле. Вместо этого просто скопируйте элементы. Вам также нужно помнить, что Armadillo хранит матрицы в мажорном порядке (для совместимости с LAPACK). См. Документацию Armadillo для получения дополнительной информации о доступе к элементам.
fmat A(elements+1, elements+1, fill::zeros);
for(unsigned int i=0; i<elements+1; ++i)
for(unsigned int j=0; j<elements+1; ++j)
{
A(i,j) = globalMatrix[i][j];
}
A.print("A:");
fvec B(elements+1);
for(unsigned int i=0; i<elements+1; ++i)
{
B(i) = loadVec[i];
}
B.print("B:");