摘 要 本文首先介绍了当前在国内外十分流行的工程设计和系统仿真软件包Matlab的优缺点,然后展开介绍了Matcom(一种将Matlab与C++结合的工具)的功能及如何使用,最后对其效果进行了总结。~..~
关键词 Matlab Visual C++ Matcom ECG
1 工程设计软件Matlab特点分析
Matlab 是MathWorks公司于1982年推出的一套高性能的数值计算和可视化软件。它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便、界面友好的用户环境。它还包括了ToolBox(工具箱)的各类问题的求解工具,可用来求解特定学科的问题。其特点是:
(1)可扩展性:Matlab最重要的特点是易于扩展,它允许用户自行建立指定功能的M文件。对于一个从事特定领域的工程师来说,不仅可利用Matlab所提供的函数及基本工具箱函数,还可方便地构造出专用的函数,从而大大扩展了其应用范围。当前支持Matlab的商用Toolbox(工具箱)有数百种之多。而由个人开发的Toolbox则不可计数。
(2)易学易用性:Matlab不需要用户有高深的数学知识和程序设计能力,不需要用户深刻了解算法及编程技巧。
(3) 高效性:Matlab语句功能十分强大,一条语句可完成十分复杂的任务。如fft语句可完成对指定数据的快速傅立叶变换,这相当于上百条C语言语句的功能。它大大加快了工程技术人员从事软件开发的效率。据MathWorks公司声称,Matlab软件中所包含的Matlab源代码相当于70万行C代码。
由于Matlab具有如此之多的特点,在欧美高等院校,Matlab已成为应用于线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具;在研究单位、工业部门,Matlab也被广泛用于研究和解决各种工程问题。当前在全世界有超过40万工程师和科学家使用它来分析和解决问题。
然而Matlab自身所存在的某些缺点限制了它的应用范围。
(1)Matlab是一种解释性语言,因此它的实时效率是相当差的。例如在笔者所从事的一个心电信号处理项目中,采用Matlab语言来处理5分钟的心电数据,在486/66系统机上需要25分钟,而同样的算法,用C语言实现,仅需30多秒。由此可见,Matlab的语言执行效率是比较低的。
(2)Matlab程序不能脱离其环境运行,因此它不能被用于开发商用软件。
(3)Matlab程序可以被直接看到。
2 Matcom:Matlab与C++的完美结合
MathTools公司推出的Matcom(可于http://www.mathtools.com处获取)可以说是以上问题的完美解决。它可将Matlab的源代码译成同等功能的C++源码。既保持了Matlab的优良算法,又保持了C++的高执行效率。
下面将详细介绍如何使Matlab与C++接口。
运行环境:Matcom 3.0 Matlab
5.1 Visual
C++
5.0
中文Windows
95
PC:486/66
(1)首先应设置Matcom所对应的编译器类型、数据类型。
(2)将你所需要的.M文件翻译成C源码。
在这里将用一个简单的滤波器程
Matlab源程序:
Lin.m
b=[1 2
1];
a=[1 -1.58
0.64];n=50;
x=[1, ones(1,n-1)];
y=filter(b,a,x);
plot(y./70, *
);
hold on
plot(x, .
);
grid;
下面给出了经Matcom翻译后的C++源程序。
Lin.cpp
M b("b",0,0);
M a("a",0,0);
M n("n",0,0);
M x("x",0,0);
M y("y",0,0);
b=(BR(1.0),2.0,1.0);
a=(BR(1.0),-1.58,0.64);
n=50.0;
x=(BR(1.0),ones(1.0,n-1.0));
y=filter(b,a,x);
plot(rdivide(y,70.0),TM("*"));
hold(TM("on"));
plot(x,TM("."));
grid();
(3)Visual C++环境设置。
在 Visual
C++中的"Project
/
Settings
/
C,
C++
/
Preprocessor
/Additional
include
subdirectories" 中填入当前Matcom所处的路径.。(如"c:matcom")在Visual
C++中的工程窗口处"
"Project
/
Add
to
Project
/
Files".加入mlibvc0.lib库文件。
(4)修改C++源代码。
注意:
①在头文件处应包含
matlib.h.
#define
MLIB
0
#include
"matlib.h."
②在类成员函数CMfcApp::InitInstance中调用. InitM启动对Matlab函数的调用。
BOOL CEcgstarApp::InitInstance()
{
TRACE0("initM
");
initM(stin,stout,sterr);
......
}
③在类构造函数CMfcApp::CMfcApp.中不要调用任何Matlab函数
④在类构造函数CMfcApp::~CmfcApp中调用exitM结束对Matlab函数的调用。
CEcgstarApp::~CEcgstarApp()
{
exitM();
}
⑤在程序中合适的位置插入经Matcom翻译过后的C++源码。
⑥编译工程文件,就可得到你所需的结果。
关键词 Matlab Visual
1 工程设计软件Matlab特点分析
(1)可扩展性:Matlab最重要的特点是易于扩展,它允许用户自行建立指定功能的M文件。对于一个从事特定领域的工程师来说,不仅可利用Matlab所提供的函数及基本工具箱函数,还可方便地构造出专用的函数,从而大大扩展了其应用范围。当前支持Matlab的商用Toolbox(工具箱)有数百种之多。而由个人开发的Toolbox则不可计数。
(2)易学易用性:Matlab不需要用户有高深的数学知识和程序设计能力,不需要用户深刻了解算法及编程技巧。
(3) 高效性:Matlab语句功能十分强大,一条语句可完成十分复杂的任务。如fft语句可完成对指定数据的快速傅立叶变换,这相当于上百条C语言语句的功能。它大大加快了工程技术人员从事软件开发的效率。据MathWorks公司声称,Matlab软件中所包含的Matlab源代码相当于70万行C代码。
然而Matlab自身所存在的某些缺点限制了它的应用范围。
(1)Matlab是一种解释性语言,因此它的实时效率是相当差的。例如在笔者所从事的一个心电信号处理项目中,采用Matlab语言来处理5分钟的心电数据,在486/66系统机上需要25分钟,而同样的算法,用C语言实现,仅需30多秒。由此可见,Matlab的语言执行效率是比较低的。
(2)Matlab程序不能脱离其环境运行,因此它不能被用于开发商用软件。
2 Matcom:Matlab与C++的完美结合
MathTools公司推出的Matcom(可于http://www.mathtools.com处获取)可以说是以上问题的完美解决。它可将Matlab的源代码译成同等功能的C++源码。既保持了Matlab的优良算法,又保持了C++的高执行效率。
下面将详细介绍如何使Matlab与C++接口。
运行环境:Matcom
(1)首先应设置Matcom所对应的编译器类型、数据类型。
(2)将你所需要的.M文件翻译成C源码。
Matlab源程序:
Lin.m
b=[1
a=[1
x=[1,
y=filter(b,a,x);
plot(y./70,
hold
plot(x,
grid;
下面给出了经Matcom翻译后的C++源程序。
M
M
M
M
M
b=(BR(1.0),2.0,1.0);
a=(BR(1.0),-1.58,0.64);
n=50.0;
x=(BR(1.0),ones(1.0,n-1.0));
y=filter(b,a,x);
plot(rdivide(y,70.0),TM("*"));
hold(TM("on"));
plot(x,TM("."));
grid();
(3)Visual
(4)修改C++源代码。
注意:
①在头文件处应包含
②在类成员函数CMfcApp::InitInstance中调用.
BOOL
{
③在类构造函数CMfcApp::CMfcApp.中不要调用任何Matlab函数
④在类构造函数CMfcApp::~CmfcApp中调用exitM结束对Matlab函数的调用。
⑤在程序中合适的位置插入经Matcom翻译过后的C++源码。
⑥编译工程文件,就可得到你所需的结果。