⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mathtools601.txt

📁 C++ interface
💻 TXT
字号:
发信人: FangQ (木头虫子), 信区: MathTools 
标  题: Matlab与C++接口与混合编程讨论小结(十二) 
发信站: BBS 水木清华站 (Tue Nov  2 22:31:02 1999) 
  
3.3  用Matcom翻译m文件 
  
直接调适M文件:在主界面上打开.m文件的主文件,在菜单中选择compile to exe 
 or dll  就可以了,你也可以设置断点后,就可以查看变量的值,这些将在主窗口 
 的一侧出现,双击就可得到其当前值。 
编译后的cpp、exe、dll文件都在matcom 当前工作目录下,如果是debug模式,就在 
dubug目录下找,否则就在Release目录下找。 
  
3.4  在CB中C++与Matlab语言混编 
  
这种方法是我最喜欢的方法,因为这样不但可以发挥matcom强大的数学计算功能, 
还可以结合可视化编译环境来进行界面开发,可以制作完整的应用计算软件, 
交付用户使用。 
我所用的可视IDE是Inprise公司的C++Builder 3.0/4.0,matcom版本为4.0/4.5, 
注意,在CB4.0上只能使用matcom4.5版本。 
在进行编程之前你需要作如下准备工作 
  
1.选择菜单New\Console Wizard\Console Exe,建立一个Win32位DOS程序 
2.将matcom\lib\matlib.h拷贝到CB\include目录下 

  将matcom\lib\v4500b.lib拷贝到CB\lib目录下 
3.选择菜单Project\Add to project\选择lib\v4500.lib 
  
于是程序变为 
#pragma hdrstop 
#include <condefs.h> 
#include "stdio.h" 
#include "matlib.h" 
//--------------------------------------------------------------------------- 
USELIB("v4500b.lib"); 
//--------------------------------------------------------------------------- 
#pragma argsused 
int main(int argc, char **argv) 
{ 
/*****************************************/ 
//     Please Write Your Code Here       */ 
/*****************************************/ 
        return 0; 
} 
  
3.选择菜单Project\Add to Reportaries\  将该工程存为Project中的一个模板。 
3.选择菜单Project\Add to Reportaries\  将该工程存为Project中的一个模板。 
portaries\  将该工程存为Project中的一个模板。 
OK,现在可以进行你所需要的工作了。 
用菜单你存为的模板建立一个新的工程,在代码段写 
  
dMm(a);  //define a Matrix class 
a=zeros(3);     //Let the matrix be a 3*3 zero matrix 
disp(a);        //Display the matrix 
  
运行一下看看,程序会打印出3*3的0零阵 
稍微复杂一点的程序 
  
dMm(a);dMm(b);dMm(c); //声明三个矩阵 
a=rand(3,2);  //生成3*2随机阵 
b=zeros(3,2); 
c=a+b;   //矩阵相加 
c(1,c_p)=a(2,c_p); //matlab中写为c(1,:)=a(2,:) 
c=ctranspose(c); //矩阵转置 
disp(c);printf("\n"); 
disp(a);printf("\n"); 
getch(); 
c(colon(1,1,3))=a(colon(1,2,5)); //matlab中写为c([1:1:3])=a([1:2:5]) 
disp(c); 
getch(); 
getch(); 
getch(); 
  
可以发现在matlab中常用的一些表示都可以在matcom中找到对应,并且同样 
方便有效。 
再举一个绘图的例子,就用matcom自己带的例子吧 
  
    subplot(121.0);            //subplot(1,2,1) 
    surf((CL(peaks(25.0))));   //surf(peaks(25)) 
    subplot(122.0);            //subplot(1,2,2) 
    pcolor((CL(peaks(25.0)))); //pcolor(peaks(25)) 
    colormap(TM("copper"));    //colormap('copper') 
    drawnow()                  //必须有这句,否则只画一个图出来 
                               //这是我问他们的技术支持搞到的 
  
可以看到基本上是一句对一句,没有什么多余的话。所以习惯编写 
matlab程序的同志写matcom C的语句来也应该没有什么问题。 
(但上面这个程序确实有问题,在mideva中编译后第二个subplot 
是可以正常画出来的,但在CB中编译就只画一个subplot乐,具体 
原因希望大家讨论,我现在也在试),mideva编译该语句的指令是 
  
bcc32  文件名  -IC:\MATCOM45\lib -H=matlib.csm -v -a4 -5 -e 
EXEFLAGS= -WC 

DLLFLAGS= -WD 
  
我想CB中可能要改option,大家试试看。 
总的说来,决大多数的matlab的语句都可以轻松移植到CB中来,所以就可以直接在 
CB中写matlab程序了,只是大家要注意几个关键的函数 
  
colon(xstart,xstep,xstop) == xstart:xstep:xstop 
(CL(A1),A2,A3....)  == (A1,A2,A3,...)一个矩阵行,大多数 
                                        多参数输入函数都用到CL 
(BR(a1),a2,a3....)  == (a1,a2,a3...) 
TM("a string")   == 'a string'  TM将char *变为串矩阵 
c_p    == :   整行或整列 
i_o    == [out =fun(in)就写为fun(in, i_o, out) 
其他的大家编几个程序就清楚了。 
-- 
  
      这   是   最   后   的   斗   争 
      THIS   IS   THE  FINAL  CONFLICT 
  
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.115.15.64] 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -