MATLAB 14 1 MATLAB n C MATLAB n
MATLAB 程式設計入門篇:通用運算式 14 -1 MATLAB編譯器簡介 n 進入範例說明前,必須先設定電腦上的C編譯 器,以便用於MATLAB編譯器,方法如下述 n 在MATLAB命令視窗下輸入「mbuild -setup」,系 統回應如下: Please choose your compiler for building standalone MATLAB applications: Would you like mbuild to locate installed compilers [y]/n?
MATLAB 程式設計入門篇:通用運算式 14 -1 MATLAB編譯器簡介 n 輸入「y」之後,按下 Enter,系統回應如下: Select a compiler: [1] Lcc C version 2. 4. 1 in C: PROGRAM FILESMATLABR 2006 Asyslcc [2] Microsoft Visual C/C++ version 8. 0 in C: Program FilesMicrosoft Visual Studio 8 [3] Microsoft Visual C/C++ version 6. 0 in C: PROGRA~1MIAF 9 D~1 [0] None Compiler: n 這些C編譯器是MATLAB在你的電腦自動偵測出來的 結果(所以在不同的電腦會得到不同的結果)
MATLAB 程式設計入門篇:通用運算式 14 -2 產生獨立應用程式 n 若要MATLAB編譯器將一個MATLAB函式編譯成獨 立應用程式,所使用的指令是 mcc,格式如下 n n mcc –m user. Func. m 先撰寫一個 MATLAB 函式my. Eig. Value. m n 範例14 -1:my. Eig. Value/my. Eig. Value. m function eig. Value = my. Eig. Value(mat) %my. Eig. Value: Generate the eigenvalues of the given matrix if (isstr(mat)) % 若輸入是字串,轉成數值 mat=eval(mat); end [a, b] = eig(mat); eig. Value=diag(b); disp(eig. Value); % 顯示固有值 eigen. Value
MATLAB 程式設計入門篇:通用運算式 14 -3 產生共享資料庫 n n 使用MATLAB編譯器可以產生共享程式庫( Shared Libraries),包含所有由使用者定義 的函式,以便讓其他獨立應用程式來呼叫。 產生一個共享程式庫。首先先定義這兩個 MATLAB 函式 n 範例14 -2:shared. Library/my. Mat. Multiply. m function out = my. Mat. Multiply(mat 1, mat 2) %my. Mat. Eig: Generate the product of two given matrices out=mat 1*mat 2;
MATLAB 程式設計入門篇:通用運算式 14 -3 產生共享資料庫 n 範例14 -3:shared. Library/my. Mat. Inv. m function inv. Mat = my. Mat. Inv(mat) %my. Mat. Inv: Generate the inverse matrix of the given matrix inv. Mat=inv(mat); n 接著將這兩個 MATLAB 函式編譯成共享程式庫, 程式庫名稱為 mat. Lib,所使用的指令如下 n n mcc -B csharedlib: mat. Lib my. Mat. Inv. m my. Mat. Multiply. m 此時會在 作目錄下產生數個檔案,主檔名都 是 mat. Lib,這些檔案即是 mat. Lib 程式庫
MATLAB 程式設計入門篇:通用運算式 14 -3 產生共享資料庫 int i, j; int row. Num = mx. Get. M(in); /* 橫列個數 */ int col. Num = mx. Get. N(in); /* 直行個數 */ double *data = mx. Get. Pr(in); /* 指到輸入陣列中的雙 倍精準資料 */ /* 印出資料 */ for(i=0; i<col. Num; i++){ for(j=0; j<row. Num; j++) printf("%4. 2 ft", data[j*col. Num+i]); printf("n"); } /* 主要 作函式 */ void *main. Function(int *error. Code){
MATLAB 程式設計入門篇:通用運算式 14 -3 產生共享資料庫 } /* 創造輸入矩陣 */ in 1 = mx. Create. Double. Matrix(3, 3, mx. REAL); in 2 = mx. Create. Double. Matrix(3, 3, mx. REAL); /* 將 data 中的資料拷貝至 in 1 */ memcpy(mx. Get. Pr(in 1), data, 9*sizeof(double)); /* 將 data 中的資料拷貝至 in 2 */ memcpy(mx. Get. Pr(in 2), data, 9*sizeof(double)); /* 呼叫由 MATLAB 編譯器產生的程式庫 mat. Lib 中的函式 */ /* 計算矩陣相乘 */ mlf. My. Mat. Multiply(1, &out, in 1, in 2); printf("矩陣相乘的結果:n"); mat. Display(out); mx. Destroy. Array(out); out=NULL; /* 收回配置給 out 的記 憶體 */
MATLAB 程式設計入門篇:通用運算式 14 -3 產生共享資料庫 /* 計算反矩陣 */ mlf. My. Mat. Inv(1, &out, in 1); printf("計算反矩陣的結果:n"); mat. Display(out); mx. Destroy. Array(out); out=NULL; /* 收回配置給 out 的記 憶體 */ } /* 收回配置給 in 1 和 in 2 的記憶體 */ mx. Destroy. Array(in 1); in 1=NULL; mx. Destroy. Array(in 2); in 2=NULL; /* 呼叫 mat. Lib. Terminate() 以終止應用程式庫 */ mat. Lib. Terminate(); /* 呼叫 mcl. Terminate. Application() 以終止此應用程式 */ mcl. Terminate. Application();
- Slides: 24