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);
}
有圖為證:
相關文章
- Matlab學習-視覺化和程式設計Matlab視覺化程式設計
- FFT原理及C++與MATLAB混合程式設計詳細介紹FFTC++Matlab程式設計
- C++ & Intel MKL 混合程式設計C++Intel程式設計
- QML之C++混合程式設計C++程式設計
- c# 程式設計學習(四)C#程式設計
- c# 程式設計學習(二)C#程式設計
- C#程式設計學習(一)C#程式設計
- Linux學習/TCP程式設計學習筆記LinuxTCP程式設計筆記
- 前端學習 linux —— shell 程式設計前端Linux程式設計
- C++:與C混合程式設計 CMake undefined reference toC++程式設計Undefined
- 【混合程式設計】C/C++呼叫Fortran的DLL程式設計C++
- XCode 中 Swift / Objective-C / C / C++ 混合程式設計XCodeSwiftObjectC++程式設計
- 【學習】Linux Shell指令碼程式設計Linux指令碼程式設計
- Matlab AppDesigner程式設計教程第1章——物件導向程式設計MatlabAPP程式設計物件
- 如何學習shell程式設計?Linux運維學習shell程式設計是什麼程式設計Linux運維
- 嵌入式程式設計學習(1)程式設計
- OC/Swift/C/C++混合使用的程式設計姿勢SwiftC++程式設計
- Linux程式設計學習筆記 | Linux IO學習[2] – 標準IOLinux程式設計筆記
- 【Tensorflow_DL_Note14】TensorFlow視覺化學習1-Tensorflow與OpenCv混合程式設計視覺化OpenCV程式設計
- Linux Shell程式設計(1)Linux程式設計
- 【IDL】 IDL與C#混合程式設計技術C#程式設計
- MATLAB R2023a 數學計算和程式設計軟體 mac版Matlab程式設計Mac
- C#程式設計學習(04):基本操作學習總結C#程式設計
- 【linux】系統程式設計-1-程式、管道和訊號Linux程式設計
- Linux網路程式設計(1)Linux程式設計
- Linux系統程式設計【5】——stty的學習Linux程式設計
- MATLAB R2022a for Mac(專業程式設計和數學計算軟體)MatlabMac程式設計
- Mac專業程式設計和數學計算軟體:MATLAB R2022aMac程式設計Matlab
- python程式設計學習筆記⑦-1函式Python程式設計筆記函式
- 程式設計學習MarkDown學習程式設計
- MATLAB R2022b Mac(專業程式設計和數學計算軟體)MatlabMac程式設計
- MOOC 翁愷C語言 第五週程式設計練習1 素數和C語言程式設計
- (整合)Linux下的多程式程式設計Linux程式設計
- C語言程式設計學習中while迴圈和do……while迴圈C語言程式設計While
- C語言/C++程式設計學習:和QT零距離接觸的意義C語言C++程式設計QT
- 好程式設計師Python學習路線分享Linux和資料庫部分程式設計師PythonLinux資料庫
- 精通C#學習筆記---C#核心程式設計結構C#筆記程式設計
- C語言/C++對程式設計學習的重要性!C語言C++程式設計
- freeRTOS核心學習筆記(1)-程式設計標準筆記程式設計