我是靠谱客的博主 自然唇膏,最近开发中收集的这篇文章主要介绍chckxy函数 matlab,在VS2010中调用MATLAB内建函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

整个过程如下:

1. 首先在R盘根目录下创建"DLL"文件夹,然后把spline.m和chckxy.m两个文件拷贝到"R:DLL"文件夹下(在我的机器上,spline.m位于文件夹"C:Program FilesMATLABR2012btoolboxmatlabpolyfun"下,chckxy.m位于文件夹"C:Program FilesMATLABR2012btoolboxmatlabpolyfunprivate"下)。

2. 在MATLAB中打开"R:DLLspline.m",修改第54行代码,把"chckxy"改为"mycheck",如图:

3. 把"R:chckxy.m"重命名为mycheck.m,如图:

4. 在MATLAB中打开"R:DLLmycheck.m",修改第1行代码,把函数名由"chckxy"改为"mycheck",如图:

5. 在MATLAB命令窗口下输入mcc指令编译spline.m,即:

1

>> cd R:DLL

2

>> mcc -W cpplib:libspline -T link:lib spline.m

完成后,在"R:DLL"下会生成如下的文件,依然,其中的"libspline.dll"、"libspline.h"和"libspline.lib"这三个文件是我们所需的。

6. 接下来,打开VS2010,单击"文件"菜单--"新建"--"项目":

选择"Visual C++"--"Win32 控制台应用程序",项目名称"SplineTest",位置在R盘根目录,点击"完成"。

7. 把"R:DLL"文件夹下的"libspline.dll"、"libspline.h"和"libspline.lib"三个文件拷贝到新建的SplineTest项目路径下(即"R:SplineTestSplineTest"下),如图:

8. 在"SplineTest"项目中添加libspline.h头文件。如图,在"解决方案资源管理器"中,右键单击"头文件"--"添加"--"现有项",把第7步中拷贝到"R:SplineTestSplineTest"下的头文件"libspline.h"添加到"SplineTest"项目中去。

9. 开始配置SplineTest项目属性。在"解决方案资源管理器"中,右键点击"SplineTest"--"属性",打开属性页:

在"SplineTest属性页",左边选中"配置属性"--"VC++ 目录",右边点击"包含目录"后的下拉框,点击"编辑",如图:

在弹出的"包含目录"对话框中,点击右上方的"新行"按钮,在列表框中输入MATLAB的include文件夹位置后,点击"确定"按钮(在我机器上,路径为"C:Program FilesMATLABR2012bexterninclude"),如图:

回到"SplineTest属性页",右边点击"库目录"后的下拉框,点击"编辑",弹出"库目录"对话框,同样点击"新行"按钮,在列表框中输入MATLAB的lib文件夹位置后确定(由于我的机器是64位系统,路径为"C:Program FilesMATLABR2012bexternlibwin64microsoft";如果您是32位系统,路径应该与"win32"相关)如图:

再次回到"SplineTest属性页",左边选中"配置属性"--"链接器"--"输入",右边点击"附加依赖项"后的下拉框,点击"编辑",如图:

在弹出的"附加依赖项"对话框中,输入所需的两个lib文件:"mclmcrrt.lib"和"libspline.lib","确定"。

10. 最后,由于我是64位系统,需要配置成64位的方案平台(对于32位的系统,此步可跳过)。以"Debug"版本为例,点击工具栏中"Win32"后的下拉列表,选择"配置管理器",如图:

在弹出的"配置管理器"对话框中,点击"活动方案解决平台"的下拉列表框,选择"新建":

接着,在弹出的"新建解决方案平台"对话框中,一般会自动出现"x64","从此处复制设置"为"Win32",并自动勾选"创建新的项目平台",点击"确定"按钮。这就意味着之前我们对包含目录、库目录以及链接器的设置已被复制到64位平台中。

回到"配置管理器"对话框,可以看到"活动方案解决平台"已为"x64",点击"关闭"按钮。

至此,对"SplineTest"项目配置完毕。

11. 接下来,就是在VS2010中编写C++代码调用spline函数了。参考在VC++6.0中调用MATLAB生成的DLL中的四. 编写代码调用DLL,我们编写类似的代码。可以看到,在加入"SplineTest"项目中的"libspline.h"的第109行,包含有spline函数的声明:

1

extern LIB_libspline_CPP_APIvoid MW_CALL_CONV spline(int nargout, mwArray& output,const mwArray& x,const mwArray& y,const mwArray& xx);

该声明表示spline的调用接受5个参数:

第1个参数nargout表示返回值的个数,由于只有一个返回值,所以nargout为1;

第2个参数output表示返回值;

第3个参数x和第4个参数y表示的是样点数据;

第5个参数xx表示插值的数据点。

为了验证所编写的C++程序对spline函数的调用结果,与MATLAB中的调用结果是否一致,我使用了MATLAB帮助文件中的spline调用示例:

1

x = 0:10;

2

y = sin(x);

3

xx = 0:.25:10;

4

yy = spline(x,y,xx)

5

plot(x,y,'o',xx,yy);

上述代码的plot图看起来是这样:

打开"SplineTest"项目中的"SplineTest.cpp",模仿上述MATLAB代码编写C++代码如下:

1

// SplineTest.cpp : 定义控制台应用程序的入口点。

2

3

#include "stdafx.h"

4

#include "libspline.h"  //增加头文件

5

#include

6

#include

7

#include

8

using namespace std;

9

10

int _tmain(int argc, _TCHAR* argv[])

11

{

12

//初始化lib(必须)

13

if (!libsplineInitialize())

14

return -1;

15

16

int i, j;

17

double x[1][11], y[1][11];

18

for(i=0; i<11; i++)

19

{

20

x[0][i] = i;

21

y[0][i] =sin(x[0][i]);

22

}

23

24

double xx[1][41];

25

for(i=0; i<41; i++)

26

xx[0][i] = i*0.25;

27

28

double yy[1][41];

29

30

mwArray mwX(1,11,mxDOUBLE_CLASS);

31

mwArray mwY(1,11,mxDOUBLE_CLASS);

32

mwArray mwXX(1,41,mxDOUBLE_CLASS);

33

mwArray mwYY(1,41,mxDOUBLE_CLASS);

34

mwX.SetData(*x, 11);

35

mwY.SetData(*y, 11);

36

mwXX.SetData(*xx, 41);

37

mwYY.SetData(*yy, 41);

38

39

spline(1, mwYY, mwX, mwY, mwXX);//调用spline

40

41

cout<

42

i = 0;

43

for(j = 0; j < 41; j++)

44

{

45

//Get第一个参数表示用1个下标访问元素,j+1是列号(MATLAB下标从1开始,而C++从0开始,故做+1操作)

46

yy[0][j] = mwYY.Get(1,j+1);

47

cout<

48

i++;

49

if(i%7 == 0) cout<

50

}

51

cout<

52

53

//终止调用

54

libsplineTerminate();

55

56

return 0;

57

}

运行上述代码,得到结果如下:

而对于spline函数,在MATLAB中的调用结果是:

1

yy =

2

Columns 1 through 7

3

0    0.2692    0.5017    0.6938    0.8415    0.9408    0.9878

4

Columns 8 through 14

5

0.9786    0.9093    0.7789    0.5982    0.3810    0.1411   -0.1075

6

Columns 15 through 21

7

-0.3501   -0.5715   -0.7568   -0.8928   -0.9742   -0.9974   -0.9589

8

Columns 22 through 28

9

-0.8578   -0.7032   -0.5065   -0.2794   -0.0342    0.2142    0.4498

10

Columns 29 through 35

11

0.6570    0.8215    0.9357    0.9937    0.9894    0.9196    0.7927

12

Columns 36 through 41

13

0.6198    0.4121    0.1807   -0.0632   -0.3085   -0.5440

结果没有问题,但慢是一如既往地慢。问题解决,完毕。

最后

以上就是自然唇膏为你收集整理的chckxy函数 matlab,在VS2010中调用MATLAB内建函数的全部内容,希望文章能够帮你解决chckxy函数 matlab,在VS2010中调用MATLAB内建函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部