曾经听一室友谈到如何实现连接matlab和vc++6.0之间的混合编程,昨晚做到一个程序要用c求逆矩阵,生性很lazy的我实在不想循环套循环,递归归递归,于是在网上百度并实践了大半个晚上终于成功实现之。百度方法大致分为三种,我只捡了最简单的matcom方法实现,鉴于网上多是vc++6.0下的解说,我这里写的是visual studio 2010版的,2008应该也可以依样画葫芦。

  现简记要点如下:
  1、下载matcom4.5,这个软件很老,但貌似没有更新版本,很简洁的一个软件,大概8兆多一点。百度一下,遍地都是。载好安装完并打开,会让你选择本地matlab的路径,它也可以自动搜索,但是我的自动搜索总是会出错,于是手动搜索就ok了。完了它会提示你打开matlab,输入一段命令,照着输就可以了。

  2、完成上述步骤以后, 找到matco所在文件夹,在相应的文件夹的lib子文件夹下找到lib.h,将次文件复制,同时能注意到相同文件夹下的v4501v.lib,稍后还会用到此文件。

  3、打开vs2010,新建并编译生成一个简单的项目(比如hello world),并在该项目文件夹下的同名文件夹下,比如该项目的名称为a,则在该项目的文件夹下会有Debug,ipch,a三个文件夹,打开a这个子文件夹,把刚刚复制的matlib.h复制过来,并在vs2010界面中点击菜单中的项目-->添加现有项,在弹出的对话框中找到上文所说的v4501v.lib文件,选中并添加它到为现有项。

      如果上述三步都成功了,就可以成功实现混合vs2010和matlab的混合编译了。需要注意的是,所有matlab命令需要在initM(MATCOM_VERSION);和exitM();两个语句之间。亦即:

    initM(MATCOM_VERSION);

    ...

    (你的代码)

    ...

    exitM();

    如上结构。

    贴一个简单的我昨晚写的程序求逆矩阵:

View Code
 1 #include "stdafx.h"
2
3 #include "matlib.h"
4
5
6
7 int _tmain(int argc, _TCHAR* argv[])
8
9 {
10
11 initM(MATCOM_VERSION);
12
13 Mm a,b;//建立两个矩阵a,b;
14
15 load(TM("m.txt"),CL(a));//打开m.txt文本文档,读入文件中的矩阵,并保存在a中;
16
17 printf("矩阵:\n");
18
19 disp(a);//输出a;
20
21 printf("行列式:\n");
22
23 disp(det(a));//输出行a的行列式;
24
25 printf("逆矩阵:\n");
26
27 b=inv(a);//计算a的逆矩阵,并保存在b中
28
29 saveascii(TM("result.txt"),CL(b));//把b写到“resul.txt”文本文档中;
30
31 disp(b);//输出b。
32
33 exitM();
34
35 return 0;
36
37 }



运行结果:

如上。个人感觉这样比单纯的用c的循环递归什么的对矩阵进行计算要简便很多。

另,matcom有专门的手册,网上有可供下载查阅的。

http://ishare.iask.sina.com.cn/f/10903734.html?from=like

这个地址是新浪的,需要一个积分,不过,貌似注册就送积分。

综上。。。小人第一次倒腾此类相关程序,如有不足,欢迎指正探讨。

posted on 2011-10-07 19:46  天随子  阅读(2332)  评论(0编辑  收藏  举报