📄 mathtools601.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 + -