matlab程序移植到C(輸出比較)

工作中有時需要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軟件,直接比較上面兩個文件。

然後就是看比較結果了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章