matlab 對於科學計算來說非常方便易用,但是效率不太高,尤其是一些自己寫的未經優化的程序。可以將計算比較耗時的算法用C語言實現然後在matlab下調用,但關鍵是如何編寫和調試。編寫還好說,查看一下mex藉口函數的用法應該跟編寫普通函數差不多,只不過參數需要經過轉換,轉換時細心點,再加上有點C指針的基本功就能勝任。
但是調試比較麻煩,之前一直以爲是一件十分困難的事情,但是嘗試之後才發現很簡單
我們要做的有以下幾點
1. 首先當然是編寫一個C函數了(借用一個網上的簡單例子)建立一個文件命名爲 add.c 將下面的內容複製進去,然後放入一個文件夾,然後將matlab當前路徑切換到
add.c 所在的文件夾
// add.c
#include "mex.h" // 使用MEX文件必須包含的頭文件// 執行具體工作的C函數
double add(double x,double y)
{
return x + y;
}// MEX文件接口函數
void mexFunction(
int nlhs,
mxArray *plhs[],
int nrhs,
const mxArray *prhs[]) {
double *a;
double b, c;
plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
a = mxGetPr(plhs[0]);
b = *(mxGetPr(prhs[0]));
c = *(mxGetPr(prhs[1]));
*a = add(b, c);
}
2.在matlab 命令窗口輸入 mex -g add.c -output add -g 表示編譯時加入調試信息,結果會生成add.mexw32.pdb文件如圖所示,如果不加-g命令只會生成 add.mexw32文件
3.在打開vs2010 在頂端debug選項下選擇attach to process選項進入
找到matlab進程,選擇attach.然後自動關閉對話框,在vs中打開前面提到的add.c,然後再需要設置斷點的地方設置斷點如設置在下圖中的位置,斷點沒有變紅,沒關係,接着進行。
4.在matlab同目錄下寫一個test.m文件,內容如下
5.在matlab下點調試按鈕然後程序自動就跳到了剛纔add.c設斷點的地方且斷點變紅了.接下來就和調試C程序完全一樣了。