Linux下C和matlab混合程式設計學習(1)
1.編譯m檔案為可執行檔案
mex -setup設定好了c編譯器之後。
寫個簡單函式test.m
function test
x=0:0.01:2*pi;
y=sin(x);
plot(x,y)
儲存.
編譯mcc -m test.m
就會生成可執行的檔案test和一個指令碼run_test.h
./run_test.h<matlab_root>/bin
2.C中呼叫matlab計算引擎(繪圖等)
步驟:
(1)安裝csh;
(2)設定:動態庫路徑LD_LIBRARY_PATH中新增<matlab_root>/bin/<Arch>;
PATH路徑中新增<matlab_root>/bin
(3)編譯:gcc test.c -o test -I $HOME/MATLAB/R2011b/extern/include-L $HOME/MATLAB/R2011b/bin/glnx86/ -leng -lmx -lmex
(注意cpu是x86還是a64)
(4)執行:./test
其中第(2)步設定,在~/.bashrc中新增:
MATLAB="Matlab_Installed_Directory"(比如說我的安在了$HOME/MATLAB/R2011b下面,所以應該寫全到2011b)
export PATH=~/Program:$MATLAB/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MATLAB/bin/glnx86#這裡注意cpu是x86還是a64
exportC_INCLUDE_PATH=$C_INCLUDE_PAT:$MATLAB/extern/include
export LIBRARY_PATH=$LIBRARY_PATH:$MATLAB/bin/glnx86
(前面兩行是一個是可執行檔案搜尋路徑,一個是動態庫搜尋路徑,後面兩個是gcc編譯時的include標頭檔案搜尋路徑和動態庫搜尋路徑)
這樣第三步編譯就可以簡單的寫為:
gcc test.c -o test -leng -lmx -lmex
原始檔test.c如下:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "engine.h"
#define N 500
main()
{
int i;
double x[N],y[N];
Engine *ep;
for(i=0;i<N;i++){
x[i]=0.01*i;
y[i]=sin(x[i]);
}
//啟動matlab計算引擎,異常處理
if(!(ep=engOpen(NULL))){
printf("Can't start Matlab engine!");
exit(1);
}
//定義mxArray
mxArray *xx=mxCreateDoubleMatrix(1,N,mxREAL);
mxArray *yy=mxCreateDoubleMatrix(1,N,mxREAL);
//將陣列複製到mxArray
memcpy(mxGetPr(xx),x,N*sizeof(double));
memcpy(mxGetPr(yy),y,N*sizeof(double));
//將mxArray陣列寫入到Matlab工作空間,並命名
engPutVariable(ep,"xx",xx);
engPutVariable(ep,"yy",yy);
//向Matlab引擎傳送畫圖命令
engEvalString(ep,"plot(xx,yy);");
printf("Press 'Enter' to exit!");
getchar();
//銷燬mxArray陣列
mxDestroyArray(xx);
mxDestroyArray(yy);
//關閉matlab引擎
engClose(ep);
}
有圖為證:
相關文章
- C/C++與Matlab混合程式設計初探C++Matlab程式設計
- 【目錄】Matlab和C#混合程式設計文章目錄MatlabC#程式設計
- Java與Matlab混合程式設計JavaMatlab程式設計
- Matlab學習-視覺化和程式設計Matlab視覺化程式設計
- FFT原理及C++與MATLAB混合程式設計詳細介紹FFTC++Matlab程式設計
- Matlab & C++ 混合程式設計mex檔案的編寫與除錯MatlabC++程式設計除錯
- QML之C++混合程式設計C++程式設計
- C++ & Intel MKL 混合程式設計C++Intel程式設計
- Swift和Objective-C混合程式設計——Swift呼叫OCSwiftObject程式設計
- Swift和Objective-C混合程式設計——OC呼叫SwiftSwiftObject程式設計
- c# 程式設計學習(四)C#程式設計
- C#程式設計學習(一)C#程式設計
- c# 程式設計學習(二)C#程式設計
- 【混合程式設計】C/C++呼叫Fortran的DLL程式設計C++
- C++:與C混合程式設計 CMake undefined reference toC++程式設計Undefined
- C/C++在Java、Android和Objective-C三大平臺下實現混合程式設計C++JavaAndroidObject程式設計
- 國內第一部C#.Net呼叫Matlab混合程式設計視訊教程C#Matlab程式設計
- Linux學習/TCP程式設計學習筆記LinuxTCP程式設計筆記
- 【原創】Matlab.NET混合程式設計技巧之找出Matlab內建函式Matlab程式設計函式
- 嵌入式程式設計學習(1)程式設計
- Qt 與 Objective-C 的混合程式設計QTObject程式設計
- C與指令碼的混合程式設計 (轉)指令碼程式設計
- Linux下C語言程式設計(轉)LinuxC語言程式設計
- linux下TCP socket程式設計初步(1)LinuxTCP程式設計
- 你應當如何學習C++(以及程式設計)(rev#1)C++程式設計
- 【5.1送禮】國內第一部Matlab和C#.Net混合程式設計視訊教程【免費】MatlabC#程式設計
- 前端學習 linux —— shell 程式設計前端Linux程式設計
- 【原創】Matlab.NET混合程式設計技巧之直接呼叫Matlab內建函式Matlab程式設計函式
- XCode 中 Swift / Objective-C / C / C++ 混合程式設計XCodeSwiftObjectC++程式設計
- 如何學習shell程式設計?Linux運維學習shell程式設計是什麼程式設計Linux運維
- OC/Swift/C/C++混合使用的程式設計姿勢SwiftC++程式設計
- linux環境下的c++程式設計LinuxC++程式設計
- C#程式設計學習(04):基本操作學習總結C#程式設計
- linux作業系統下c語言程式設計入門(1)(轉)Linux作業系統C語言程式設計
- 【學習】Linux Shell指令碼程式設計Linux指令碼程式設計
- Linux Shell 程式設計學習筆記Linux程式設計筆記
- 一個程式設計師的Java和C++學習之路(整理)程式設計師JavaC++
- 如何學習程式設計和轉行程式設計