日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab axb c,matlab调用C源代码(续)

發(fā)布時間:2025/3/12 循环神经网络 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab axb c,matlab调用C源代码(续) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【例2】試用MEX文件求5階完全圖鄰接矩陣的特征值及對應(yīng)的特征向量。

下面是求該矩陣的MEX文件。

#include "mex.h"

void mexFunction(int nlhs,mxArray

*plhs[],int nrhs,const mxArray *prhs[])

{

double

x;

mxArray

*y,*z,*w;

int n;

if

(nrhs!=1)

mexErrMsgTxt("One inputs required.");

if (nlhs !=

3)

mexErrMsgTxt("Three output required.");

if

(!mxIsDouble(prhs[0])||mxGetN(prhs[0])*mxGetM(prhs[0])!=1)

mexErrMsgTxt("Input must be a scalar.");

x=mxGetScalar(prhs[0]);

plhs[0]=mxCreateDoubleMatrix(x,x,mxREAL);

plhs[1]=mxCreateDoubleMatrix(x,x,mxREAL);

plhs[2]=mxCreateDoubleMatrix(x,x,mxREAL);

n=mxGetM(plhs[0]);

y=plhs[0];

z=plhs[1];

w=plhs[2];

//利用mexCallMATLAB計算特征值

mexCallMATLAB(1,&plhs[1],1,prhs,"ones");

mexCallMATLAB(1,&plhs[2],1,prhs,"eye");

mexCallMATLAB(1,&plhs[0],2,&plhs[1],"-");

mexCallMATLAB(2,&plhs[1],1,&plhs[0],"eig");

//演示mexEvalString的功能

mexEvalString("y=y*2");

mexEvalString("a=a*2");

}

在MATLAB命令窗口輸入以下命令:

>> mex

Matlab_2.cpp

>>

clear

>>

a=magic(5)

a =

17?24?1?8?15

23?5?7?14?16

4?6?13?20?22

10?12?19?21?3

11?18?25?2?9

>>

[y,z,w]=Matlab_2(5)

??? Undefined function or variable

'y'.

a =

34?48?2?16?30

46?10?14?28?32

8?12?26?40?44

20?24?38?42?6

22?36?50?4?18

y =

0?1?1?1?1

1?0?1?1?1

1?1?0?1?1

1?1?1?0?1

1?1?1?1?0

z =

0.8333?-0.1667?-0.1667?0.2236?0.4472

-0.1667?0.8333?-0.1667?0.2236?0.4472

-0.1667?-0.1667?0.8333?0.2236?0.4472

-0.5000?-0.5000?-0.5000?0.2236?0.4472

0?0?0?-0.8944?0.4472

w =

-1?0?0?0?0

0?-1?0?0?0

0?0?-1?0?0

0?0?0?-1?0

0?0?0?0?4

由上面可以看出,K5的特征值為–1和4,其中–1是四重根。MATLAB提供了mexGetVariable、mexPutVariable函數(shù),以實現(xiàn)MEX空間與其它空間交換數(shù)據(jù)的任務(wù),具體可以參看MATLAB幫助文檔。

5.4建立二維雙精度矩陣函數(shù)mxCreateDoubleMatrix

其格式具體如下:

#include "matrix.h"

mxArray *mxCreateDoubleMatrix(int m,

int n, mxComplexity ComplexFlag);

其中m代表行數(shù),n代表列數(shù),ComplexFlag可取值mxREAL

或mxCOMPLEX。如果創(chuàng)建的矩陣需要虛部,選擇mxCOMPLEX,否則選用mxREAL。

類似的函數(shù)有:

mxCreateCellArray

創(chuàng)建n維元胞mxArray

mxCreateCellMatrix

創(chuàng)建二維元胞mxArray

mxCreateCharArray

創(chuàng)建n維字符串mxArray

mxCreateCharMatrixFromStrings

創(chuàng)建二維字符串mxArray

mxCreateDoubleMatrix

創(chuàng)建二維雙精度浮點(diǎn)mxArray

mxCreateDoubleScalar

創(chuàng)建指定值的二維精度浮點(diǎn)mxArray

mxCreateLogicalArray

創(chuàng)建n維邏輯mxArray,初值為false

mxCreateLogicalMatrix

創(chuàng)建二維邏輯mxArray,初值為false

mxCreateLogicalScalar

創(chuàng)建指定值的二維邏輯mxArray

mxCreateNumericArray

創(chuàng)建n維數(shù)值mxArray

mxCreateNumericMatrix

創(chuàng)建二維數(shù)值mxArray,初值為0

mxCreateScalarDouble

創(chuàng)建指定值的雙精度mxArray

MxCreateSparse

創(chuàng)建二維稀疏mxArray

mxCreateSparseLogicalMatrix

創(chuàng)建二維稀疏邏輯mxArray

MxCreateString

創(chuàng)建指定字符串的1 n的串mxArray

mxCreateStructArray

創(chuàng)建n維架構(gòu)mxArray

mxCreateStructMatrix

創(chuàng)建二維架構(gòu)mxArray

5.5 獲取行維和列維函數(shù)mxGetM、mxGetN

其格式如下:

#include "matrix.h"

int mxGetM(const mxArray

*array_ptr);

int mxGetN(const mxArray

*array_ptr);

與之相關(guān)的還有:

mxSetM:設(shè)置矩陣的行維

mxSetN:設(shè)置矩陣的列維

5.6 獲取矩陣實部和虛部函數(shù)mxGetPr、mxGetPi

其格式如下:

#include "matrix.h"

double *mxGetPr(const mxArray

*array_ptr);

double *mxGetPi(const mxArray

*array_ptr);

與之相關(guān)的函數(shù)還有:

mxSetPr:設(shè)置矩陣的實部

mxSetPi:設(shè)置矩陣的虛部

【例3】實現(xiàn)字符串的倒序輸出。

#include "mex.h"

void revord(char *input_buf,int

buflen,char *output_buf)

{

int i;

//實現(xiàn)字符串倒序

for(i=0;i

*(output_buf+i)=*(input_buf+buflen-i-2);

}

void mexFunction(int nlhs,mxArray

*plhs[],int nrhs,const mxArray *prhs[])

{

//定義輸入和輸出參量的指針

char

*input_buf,*output_buf;

int

buflen,status;

//檢查輸入?yún)?shù)個數(shù)

if(nrhs!=1)

mexErrMsgTxt("One input required.");

else

if(nlhs>1)

mexErrMsgTxt("Too many output arguments.");

//檢查輸入?yún)?shù)是否是一個字符串

if(mxIsChar(prhs[0])!=1)

mexErrMsgTxt("Input must be a string.");

//檢查輸入?yún)?shù)是否是一個行變量

if(mxGetM(prhs[0])!=1)

mexErrMsgTxt("Input must a row vector.");

//得到輸入字符串的長度

buflen=(mxGetM(prhs[0])*mxGetN(prhs[0]))+1;

//為輸入和輸出字符串分配內(nèi)存

input_buf=mxCalloc(buflen,sizeof(char));

output_buf=mxCalloc(buflen,sizeof(char));

//將輸入?yún)⒘康膍xArray結(jié)構(gòu)中的數(shù)值拷貝到C類型字符串指針

status=mxGetString(prhs[0],input_buf,buflen);

if(status!=0)

mexWarnMsgTxt("Not enough space. String is truncated.");

//調(diào)用C程序

revord(input_buf,buflen,output_buf);

plhs[0]=mxCreateString(output_buf);

}

這個程序中需要注意的地方是mxCalloc函數(shù),它代替了標(biāo)準(zhǔn)C程序中的calloc函數(shù)用于動態(tài)分配內(nèi)存,而mxCalloc函數(shù)采用的是MATLAB的內(nèi)存管理機(jī)制,并將所有申請的內(nèi)存初始化為0,因此凡是C代碼需要使用calloc函數(shù)的地方,對應(yīng)的Mex文件應(yīng)該使用mxCalloc函數(shù)。同樣,凡是C代碼需要使用realloc函數(shù)的地方,對應(yīng)的Mex文件應(yīng)該使用mxRealloc函數(shù)。

在MATLAB命令窗口中對revord.cpp程序代碼編譯鏈接:

>> mex

revord.cpp

在MATLAB命令窗口中對C-MEX文件revord.dll進(jìn)行測試:

>> x='I

am student.';

>>

revord(x)

ans =

.tneduts ma I

總結(jié)

以上是生活随笔為你收集整理的matlab axb c,matlab调用C源代码(续)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。