工作中有时需要matlab移植,难点是需要验证矩阵输出与matlab中的是否相同。
相同则基本证明代码编写没有问题。
然而打印在屏幕上的办法不是特别好,小矩阵没有问题。大矩阵你看的眼睛都要瞎!
所以我一般是这样做的,以下是我的方法,也不是什么智能方法。更希望朋友们能提供一些更好的方法,感激不尽!
思路:通过程序代码,分别将C程序和matlab程序的同一个矩阵输出保存在两个文本文件里(相同格式)。然后用工具——beyond compare来比较。这样很容易查出问题。
(1)C程序中的输出
#include "iostream.h"
#include "fstream.h"
#include <iomanip.h> // 可能需要包含的头文件
// 输出矩阵到txt文件
typedef struct _MATRIX_ // 我当时写代码时自定义的一个矩阵结构体,有行,列,mat_p是初始化是new一块row*column的内存表示各个数
{
double *mat_p;
int row;
int column;
}MATRIX;
void printTofile(MATRIX m)
{
FILE *outfile;
outfile=fopen("cppOutput.txt","w");
//outfile.open("vad_output.txt");
int i,j;
for(i=0;i<m.row;i++)
{
for(j=0;j<m.column;j++)
{
//outfile<<setprecision(10)<<m.mat_p[i*m.column+j]<<endl;
fprintf(outfile,"%1.14f\n",m.mat_p[i*m.column+j]);// 是小数的时候用这个
//fprintf(outfile,"%d\n",(int)m.mat_p[i*m.column+j]);
}
//fprintf(outfile,"\n");
}
fclose(outfile);
return;
}
(2)matlab中的输出,这个简单一点
file=fopen('F:\vad_test\m.txt','w');
fprintf(file,'%15.14f\n',m);
fclose(file); % 我用的这种,没问题
save m.txt m -ascii -append;% 这种应该也可以,大家可以试试
(3)比较
这个就简单了,下载一个beyondcompare软件,直接比较上面两个文件。
然后就是看比较结果了。