У меня есть программа, которая обрабатывает массив двойных чисел на нескольких этапах. Я хочу сравнить его результаты с MATLAB. Возможно, я могу использовать std :: cout, чтобы напечатать некоторые из блоков размером 8×8 2D-массив до и после обработки (алгоритм работает с блоками) на консоли, а затем вручную ввести эти числа в MATLAB. Но это склонно к ошибкам и тедиям. Есть ли способ получить эти данные в MATLAB?
Matlab имеет встроенные функции для упрощения многих вещей. Я хочу получить данные до и после обработки в программе C ++ в MATLAB, а затем выполнить некоторые проверки, например, нарисовать графики и прочее. Как мне получить данные из программы на C ++ в MATLAB?
Рассматривали ли вы использование мекс-функций? Если вы используете их, я настоятельно рекомендую использовать броненосец библиотека, которая предоставляет удобные типы данных и методы для переключения между MATLAB и C ++.
Например,
#include "mex.h"#include <armadillo>
#include "armaMex.hpp"#include <sstream>
// gateway function
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
// get data from MATLAB
mat X = conv_to<mat>::from(armaGetPr(prhs[0],true));
mat Y = conv_to<mat>::from(armaGetPr(prhs[1],true));
// do some stuff
mat Z = X + Y;
// Print data in matlab
std::ostringstream buffer;
buffer << "X = " << X << endl;
buffer << "Y = " << Y << endl;
buffer << "Z = " << Z << endl;
mexPrintf("%s", buffer.str().c_str());
// send data back to Matlab
plhs[0] = armaCreateMxMatrix(Z.n_rows, Z.n_cols, mxDOUBLE_CLASS, mxREAL);
armaSetPr(plhs[0], conv_to<mat>::from(Z));
return;
}
Очень просто получить числовые данные из программы на C ++ в Matlab. Просто выведите числа в виде ascii текста в файл, затем прочитайте его, используя load
Разделяйте каждое число в столбце пробелом, а каждую строку — новой строкой.
Давайте возьмем 3 строки по 2 числа в качестве примера и скажем, что вы создаете файл «text.txt», который выглядит следующим образом:
1 2
3 4
5 6
Затем в Matlab команда:
load text.txt
будет читать данные в переменную с именем text
это матрица 3х2.
Кроме того, вы можете сделать небольшой вывод и напрямую записать в работающий .m
файл (я использую этот подход для получения чисел в документах LaTeX). Преимущество этого подхода заключается в том, что вы можете определить несколько переменных MATLAB в одном файле. Например:
#include <fstream>
int main() {
std::ofstream file;
file.open ("cpp_output.m");
file << "out = [\n";
for (double x = 1; x<6; x++) {
file << x << ' ' << 1/(x*x) << '\n';
}
file << "];";
file.close();
}
производит файл cpp_output.m
out = [
1 1
2 0.25
3 0.111111
4 0.0625
5 0.04
];
Вы, вероятно, хотите изменить точность (например, Как вывести двойное значение с полной точностью, используя cout?)