Matlab學習歷程

2021-07-07 05:17:53 字數 3101 閱讀 4200

##雙精度實數型的求和--用mextest函式實現##
#include "mex.h"

#define x_in 0

#define y_out 0

/*求和子程式*/

extern

int dp_sum(const

int n, const

double* x)

return sum;

}/*計算子程式*/

extern

void mextest(const

int ndims_x, const

int * dims_x, const

double* x, double *y)

else

if (dims_x[1] == 1)

else

y[j] = dp_sum(dims_x[0], temp);}}

}/*計算三維矩陣*/

else

if (ndims_x == 3)

y[j +k*dims_x[1]] = dp_sum(dims_x[0], temp);}}

}mxfree(temp);

}/*介面子程式*/

void mexfunction(

int nlhs,

mxarray *plhs,

int nrhs,

mxarray *prhs

)else

if (nlhs > 1)

//mrows = mxgetm(prhs[0]);//輸入必須是非複數的雙精度數;

//mcols = mxgetn(prhs[0]);

if (!mxisdouble(prhs[x_in]) || mxiscomplex(prhs[x_in]))

// plhs[0] = mxcreatdoublematrix(mrows, ncols, mxreal);

//x = mxgetpr(prhs[0]);//獲得輸入引數的指標;

//y = mxgetpr(plhs[0]);

//呼叫子程式:

// timetwo(y, x);//以輸入引數和輸出引數的指標。作為實參,

ndims_x = mxgetnumberofdimensions(prhs[x_in]);

dims_x =(int *)mxgetdimensions(prhs[x_in]);

////mx = mxgetm(prhs[x_in]);

////nx = mxgetn(prhs[x_in]);

////my = mxgetm(prhs[y_in]);

////ny = mxgetn(prhs[y_in]);

ndims_y = ndims_x;

dims_y = (int *)mxcalloc(ndims_y, sizeof(int));

if (ndims_y == 2)

else

dims_y[0] = my;

dims_y[1] = ny;

}else

if (ndims_y == 3)

plhs[y_out] = mxcreatenumericarray(ndims_y,dims_y, mxdouble_class, mxreal);

x = mxgetpr(prhs[x_in]);

y = mxgetpr(plhs[y_out]);

mextest(ndims_x, dims_x, x, y);

return;

//if (mx != 1 || my != 1)

////mz = 1;

//nz = nx + ny - 1;

//plhs[z_out] = mxcreatdoublematrix(mz, nz, mxreal);

//x = mxgetpr(prhs[x_in]);

//y = mxgetpr(plhs[y_in]);

//z = mxgetpr(plhs[z_out]);

//dv_convec(x, nx, y, ny, z);

//return 0;

}

## 編譯 ##
>> mex mextest.cpp

building with

'microsoft visual c++ 2013 professional'.

mex completed successfully.

## 1)行向量測試: ##
>> clear all

>> x=rand(1,4);

>> y1=sum(x)

y1 =

1.5553

>> y2=mextest(x)

y2 =

1

## 2)列向量測試: ##
>> clear all

>> x=rand(4,1);

>> y1=sum(x)

y1 =

2.3847

>> y2=mextest(x)

y2 =

2

##3)矩陣測試:##
>> clear all 

>> x=rand(4,4);

>> y1=sum(x)

y1 =

3.0892

2.4746

2.5718

1.5645

>> y2=mextest(x)

y2 =

2222

##4)三維陣列測試:##
>> clear all 

>> x=rand(4,4);

>> y1=sum(x)

y1 =

3.0892

2.4746

2.5718

1.5645

>> y2=mextest(x)

y2 =

2222

MATLAB版本更新歷程

20世紀70年代,美國新墨西哥大學電腦科學系主任cleve moler為了減輕學生程式設計的負擔,用fortran編寫了最早的matlab。1984年由little moler steve bangert合作成立了的mathworks公司正式把matlab推向市場。版本編號 建造編號 發布時間 ma...

MATLAB 的發展歷程和影響

matlab 的發展歷程和影響 matlab 名字由matrix 和 laboratory 兩詞的前三個字母組合而成。那是20 世紀七 十年代後期的事 時任美國新墨西哥大學電腦科學系主任的cleve moler 教授出於減輕學 生程式設計負擔的動機,為學生設計了一組呼叫linpack 和eispac...

minix學習歷程

note 以下所有操作都是在fedora core 5下完成的 bochs的安裝和使用 如何在bochs下利用root.mnx和usr.mnx啟動minix204 步驟 部分 最好通讀真個檔案 c.為了在bochs 下啟動minix204 我們只需要將a 步驟中的intel 2.0.4 i386 下...