matlabc混合編程
㈠ matlab與c混合編程,engOpen()的問題,matlab引擎啟動不了
使用engOpen()打開Matlab引擎總是失敗,問題可能就是Matlab組件沒有注冊。注冊方法:點擊開始/運行/cmd,在命令行提示窗口下更改到Matlab安裝路徑/bin,運行指令
matlab/regserver,注冊成功後會彈出Matlab 命令窗口。
㈡ matlab VC混合編程調用神經網路工具箱
調用MATLAB Engine雖然可以實現對神經網路工具箱的功能,但是因為這種方法是基於C/S模式的,效率很低,而且需要在matlab下實現其功能,無法脫離matlab直接運行,所以,基於這個原因,我放棄了利用MATLAB Engine來實現混合編程。利用C++數學庫雖然可以脫離MATLAB直接運行,但是C++數學庫並不支持神經網路工具箱,所以,無法實現基於神經網路的混合編程。利用mcc命令雖然可以直接生成.exe文件,並可以脫離MATLAB在VC++中直接運行,但是因為其自身的諸多缺點,這種方法並不能編譯神經網路函數為C++文件,所以,也無法勝任這個任務。 最後,只有COM組件這一個辦法了,由於COM組件技術的強大功能,利用matlab的COM Builder工具可以實現脫離matlab的混合編程,並成功的調用了神經網路工具箱。
㈢ Matlab混合編程之使用C\UDP動態鏈接庫傳輸數據的秘訣
方法/步驟
1、啟動兩個matlab軟體,分別載入Dll
loadlibrary('CSForUDLL.dll','CSForUDLL.h')
2、libfunctions
CSForUDLL
-full
查看一下Dll里的所有函數
3、在一個matlab運算add_server函數,作為啟動Server端
我寫的dll第一個參數為要發送的數字
calllib('CSForUDLL','add_server',2,2,0)
之行結束會發現Server端在一直等待。
4、在另一個matlab上運行add_client函數,作為啟動Client端
同理,我的dll第一個參數用來發送數字;
calllib('CSForUDLL','add_client',2,2,0)
5、回車運行,會發現返回一個數字。
這個數字是從Server端發送過來的。
6、再看一下Server端,收到Client發送的數字1
。
㈣ MATLAB混合編程在調用FORTRAN的程序
方法、把段代碼用matlab支持風格重寫遍用mex編譯成mex32文件了
方法二、把段代碼封裝成exesystem命令進行含參調用exe與matlab之間用文件進行數據傳遞
方法三、把段代碼封裝成dllmatlab里用操作dll命令進行調用種方法我用多沒法說更詳細相關資料查閱ilovematlab論壇混合編程板塊
㈤ matlab mex 混合編程
matlab調用C++的mexFunction,提高運算速度;以及在C++中通過將matlab code編譯為dll庫進行調用,演算法設計更加簡便。
㈥ matlab和c混合編程如何運行
簡單點的,你就用matlab寫一個介面程序,封裝你的c程序,類似下面這種:(matlab的例子,實現數組相乘,文件為arrayProct.c)
#include "mex.h"
/* 你的c */
void arrayProct(double x, double *y, double *z, mwSize n)
{
mwSize i;
/* multiply each element y by x */
for (i=0; i<n; i++) {
z[i] = x * y[i];
}
}
/* 介面程序 */
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
/*初始化輸入輸出*/
double multiplier; /* input scalar */
double *inMatrix; /* 1xN input matrix */
mwSize ncols; /* size of matrix */
double *outMatrix; /* output matrix */
/* 參數檢查,如果程序較簡單也可以不用做*/
if(nrhs!=2) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:nrhs","Two inputs required.");
}
if(nlhs!=1) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:nlhs","One output required.");
}
/* make sure the first input argument is scalar */
if( !mxIsDouble(prhs[0]) ||
mxIsComplex(prhs[0]) ||
mxGetNumberOfElements(prhs[0])!=1 ) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:notScalar","Input multiplier must be a scalar.");
}
/* check that number of rows in second input argument is 1 */
if(mxGetM(prhs[1])!=1) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:notRowVector","Input must be a row vector.");
}
/* get the value of the scalar input */
multiplier = mxGetScalar(prhs[0]);
/* create a pointer to the real data in the input matrix */
inMatrix = mxGetPr(prhs[1]);
/* get dimensions of the input matrix */
ncols = mxGetN(prhs[1]);
/* create the output matrix */
plhs[0] = mxCreateDoubleMatrix(1,ncols,mxREAL);
/* get a pointer to the real data in the output matrix */
outMatrix = mxGetPr(plhs[0]);
/* call the computational routine */
arrayProct(multiplier,inMatrix,outMatrix,ncols);
}
這個看起來復雜,其實很簡單的,就幾步:
1、使用mxGet*將輸入變為matlab兼容形式
2、使用mxSet*初始化輸出空間
3、使用你的C程序運算
㈦ Matlab與java混合編程怎麼回事
matlab是用java調用的。安裝的時候可以看到它在它的目錄里裝了java
matlab程序介面很豐富,可以提供介面給各種編程語言進行混合編程
matlab也可以連接各種硬體,操作機器運動,或者測量,或者輸入視頻等
㈧ matlab與java混合編程有什麼作用
Java和matlab混合編程
如果用Matlab和java混合編程開發Windows的應用程序則可以實現優勢互補,縮短開發時間,降低程序設計的復雜度。同時程序可以脫離Matlab環境獨立運行,在工程計算和教學實踐中都具有實際意義。
1.使用java調用Maltab函數的基本方法是:通過Java Builder實現Java調用Matlab。在Java環境中直接調用Matlab所生成的Jar包。
下面以在Java中產生任意維數的魔方矩陣,計算任意矩陣的特徵向量和特徵值,對兩組數據進
行擬合並繪制擬合曲線三個實例來說明通過Java
Builder實現Java調用Matlab的過程。傳統的純Java編程實現上述實例非常復雜,甚至很難完成。這一問題在Matlab中只需要調用幾個
函數即可完成。
1.1、將Matlab函數包裝成Java類
首先在Matlab中編寫三個M文件:
Eig.m
function [v,d]=Eig(input)
format long
[v,d]=eig(input);
End
Magic.m
function f =Magic( input )
f=magic(input);
end
Plot.m
function Plot(x,y )
p=polyfit(x,y,3);
t=min(x):max(x)/100:max(x);
s=polyval(p,t);
plot(x,y,'*',t,s);
title('數據擬合結果');
xlabel('x');
ylabel('y');
end
其次,在Matlab中新建一個Deployment
Project,名稱為MyProject.prj,類型為Java
package。在Project中新建三個Class,分別為GetEig,GetMagic,PolyFit。將
Eig.m,Magic.m,plot.m分別添加到上述Class中。之後點擊Builder the project,等待編譯成功即可。
1.2、在Java中調用Matlab函數
新建一個Java類JavaMatlab,並引入相關的包。
import com.mathworks.toolbox.javabuilder.*;//引入Matlab相關包
import MyProject.*;//引入建立的包及類
調用時Java與Matlab之間的參數傳遞需要通過MWNumericArray完成。具體的調用代碼如下:
package org.genius.ExpandJava;
import MyProject.*;
import com.mathworks.toolbox.javabuilder.*;
public class JavaMatlab {
public static void main(String[] args) {
MWNumericArray a = null; // 用於保存矩陣
MWNumericArray ax = null; // 用於保存矩陣
MWNumericArray ay = null; // 用於保存矩陣
Object[] result = null; // 用於保存計算結果
GetEig getEig = null;
GetMagic getMagic=null;
PolyFit polyFit=null;
int r = 4; // 魔方矩陣維數
int array[][]={{50,-20,0},{-20,80,60},{0,60,-70}};
double x[]={0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1};
double y[]={-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.3,11.2};
try {
//產生魔方矩陣並列印
a = new MWNumericArray(r, MWClassID.DOUBLE);
getMagic = new GetMagic();
result = getMagic.Magic(1,a);
System.out.println("產生的四維魔方矩陣:");
System.out.println(result[0]);
MWArray.disposeArray(result);
//計算所給矩陣的特徵向量和特徵值並列印結果
a = new MWNumericArray(array, MWClassID.DOUBLE);
getEig = new GetEig();
result = getEig.Eig(2, a);
System.out.println("原始矩陣:");
System.out.println(a.toString());
System.out.println("得到的特徵向量:");
System.out.println(result[0]);
System.out.println("得到的特徵值:");
System.out.println(result[1]);
MWArray.disposeArray(result);
ax = new MWNumericArray(x, MWClassID.DOUBLE);
ay = new MWNumericArray(y, MWClassID.DOUBLE);
polyFit = new PolyFit();
result=polyFit.Plot(ax,ay);
polyFit.waitForFigures();
} catch (Exception e) {
System.out.println("Exception: " + e.toString());
}
finally {
// 釋放本地資源
MWArray.disposeArray(a);
MWArray.disposeArray(ax);
MWArray.disposeArray(ay);
MWArray.disposeArray(result);
getEig.dispose();
getMagic.dispose();
polyFit.dispose();
}
}
}