社区
数据结构与算法
帖子详情
SOS!高分求助 C++Builder中怎样使用Matlab数学库?
wtzmax
2001-12-07 02:57:15
如题
...全文
142
4
打赏
收藏
SOS!高分求助 C++Builder中怎样使用Matlab数学库?
如题
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chmchen
2002-03-12
打赏
举报
回复
可以调用matlab的c++库函数,具体配置可以参考mbuild.bat,用法可以参考MathWorks提供的帮助。我在vc下调过,除了多了类的声明,和matlab下没有太大的差别,但没有toolbox的函数。
Koorama
2002-03-10
打赏
举报
回复
关于mathlab 的问题,请访问http://engineering.dartmouth.edu/~fangq/MATH/mindex.htm
Koorama
2002-03-10
打赏
举报
回复
发信人: jackie (jackie), 信区: Delphi_CBuilder
标 题: C++Builder调用Matlab的实现方法
发信站: 交大华缘站 (Sun Nov 7 23:04:37 1999) , 转信
国防科技大学机电工程与仪器系
张云洲
---- 摘要:本文简要叙述了Matlab语言的优点,介绍了在用Borland C++Builder语言开发的
Windows应用程序中,调用matlab语言实现科学计算和图形绘制的方法。
---- 关键词:C++Builder Matlab调用 混合编程
1. 引言
---- Matlab是一个高度集成的系统,集科学计算、图象处理、声音处理于一体,具有极高的编程
效率。近年来,Matlab已经从最初的“矩阵实验室”,渗透到科学与工程计算的多个领域,在自
动控制、信号处理、神经网络、模糊逻辑、小波分析等多个方向,都有着广泛的应用。
---- Borland C++Builder是一种新颖的可视化编程语言。在工程应用中,我们一般用
C++Builder语言编写应用程序,实现交互界面、数据采集和端口操作等,但C++Builder在数值处
理分析和算法工具等方面,其效率远远低于Matlab语言。在准确方便地绘制数据图形方面,
Matlab语言更具有无可比拟的优势。此外,Matlab还提供功能强大的工具箱。但Matlab的缺点是
不能实现端口操作和实时控制。因此,若能将两者结合运用,实现优势互补,将获得极大的效
益。
---- 本文结合实际介绍了应用Borland C++Builder3.0开发的Windos应用程序中,对Matlab的
调用方法。
---- 2. C++Builder调用Matlab的实现方案
---- 2.1 实现思路
---- 在高版本的Maltab中(如Matlab V4.2)提供了DDE接口,用户可以通过Windows的DDE通讯
基制实现外部调用。这种实现方式比较简单,但将增大主程序代码,影响运行速度。
---- 在Windows系统中,DLL是一种很特别的可执行文件,可以被多个Windows应用程序同时访
问,具有固定的共享数据段。该数据段的数据在DLL被Windows下载前会一直保留在内存中,因此
可以通过DLL实现用户程序与Matlab之间的数据传输和函数调用。
---- 具体地说,就是利用Matlab的32位动态连接库(DLL),生成相应的可以被C++Builder调用
的DLL,用来提供二者之间的基本支撑环境。只需在用户程序中加载该DLL,即可实现其数据段的
共享。然后在用户程序中操作DLL数据段的数据,并通过某种方式在用户程序中使Matlab执行该
DLL,就可实现用户程序对Matlab的调用。其形式可以是混合编程或函数调用,非常方便而高
效。
---- 2.2 实现方式
---- Matlab提供了可外部连接的DLL文件,通过将其转换为相应的Lib文件,并加以必要的设
置,就可以在C++Builder中直接进行Matlab函数调用,实现C++ Builder语言与Matlab语言的混
合编程。
---- 2.2.1 运行环境要求
---- 由于Matlab提供的是32位的DLL。其运行环境要求是Matlab V4.2或更高版本。C++Builder
可以进行32位编程,这里我们采用的是V3.0版本。
---- 2.2.2 C++Builder下LIB文件的生成
---- Matlab提供的Def文件允许用户通过Implib命令生成相应的Lib文件。其命令格式为:
---- Implib ???.lib ???.def
---- 在< matlab >\extern\include目录下,提供了如下三个.Def文件:
---- _libeng.def,_libmat.def,_libmx.def
---- 通过上述命令可以生成相应的三个Lib文件。这些Lib文件中包含了可外部调用的Matlab函
数的必要信息。
---- 3. C++Builder调用Matlab实现计算和绘图
---- 为清楚起见,作者通过一个简单的CBuilder例程进行说明。该实例通过调用Matlab实现矩
阵运算并绘制图形,来演示C++Builder对Matlab的调用。在C++Builder编辑环境中,建立一个新
的窗体MyForm,并放置一个按钮Demo。将工程文件命名为Try.prj,其主函数为try.cpp。在主函
数中,我们将使用一个实现Matlab调用的子函数DemoMatlab,作为按钮Demo的响应事件。其源代
码如下:
#include < vcl.h >
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TMyForm *MyForm;
__fastcall TMyForm::TMyForm(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TMyForm::DemoClick(TObject *Sender)
{
DemoMatlab(); //演示Matlab语言调用
}
---- 为了调用Matlab中的函数,必须进行必要的设置,将包含这些函数的文件加入工程文件
Try.prj。以下是操作过程:
---- a. 在头文件中加入Engine.h。其包含了启动Matlab调用和关闭的函数声明。
---- b. 打开Project|Option…对话框,点击Directories/Conditionals
在Include Path中,加入目录路径< matlab >\extern\include,该路径包含了engine.h和
matlab.h等有用的头文件。
在Library Path中,加入< matlab >\bin和< matlab >\extern\include。这两个目录路径包
含了可外部调用的DLL和LIB文件。
---- c. 点选Project|Add to Project…对话框,加入如下库文件:
---- _libeng.lib,_libmat.lib和_libmx.lib。
---- 在进行了这些必要的设置之后,我们就可以选用适当的函数来实现目标。 以下是子函数
DemoMatlab的程序代码。
void DemoMatlab
{
Engine *eng; //定义Matlab引擎
char buffer[200]; //定义数据缓冲区
int array[6]={1,2,3,4,5,6};
mxArray *S = NULL, *T = NULL;
engOpen(NULL); //打开MATLAB 引擎 ---①
S= mxCreateDoubleMatrix(1,6, mxREAL);
// 产生矩阵变量
mxSetName(S, "S");
memcpy((char *) mxGetPr(S),
(char *) array, 6*sizeof(int));
engPutArray(eng, S); //将变量X置入Matlab的工作空间
engEvalString(eng, "T = S/S.^2;");
//计算
engEvalString(eng, "plot(S, T);");
//绘制图形
…… ……
engOutputBuffer(eng, buffer, 200);
//获取Matlab输出
T = engGetArray(eng, "T");
//获得计算结果----②
engClose(eng);
//关闭Matlab引擎,结束调用
mxDestroyArray(S);
//释放变量
mxDestroyArray(T);
}
---- 若还需要执行其它功能和任务,那么按照上面介绍的方法,进行变量声明后,在①、②处加
写需要的语句既可。
---- 当然,使用这种方法调用Matlab不能脱离Matlab环境的支撑。但当我们不需要看到Matlab
的命令窗口时,可将其赋予Swhide属性而加以隐藏。
---- 4. 结语
---- 按照本文介绍的方法来实现C++Builder下应用程序对Matlab的调用,可以充分利用
Matlab强大的科学计算功能和丰富的工具箱,而且具有混合编程、方便高效的优点。这是C++语言
和其它高级语言所无法比拟的。按照本文的方法,我们还可以编写程序来最充分地利用Matlab的
其它资源,开发满足自己需要的程序,更有效地完成我们的工作。
--
※ 来源:.交大华缘站WWW bbs.4y.com.cn. [FROM: 202.101.209.157]
wanbaocheng
2002-03-10
打赏
举报
回复
你可以搜索一下有关Matlab的网站,会有收获的!:)
matlab
函数编译成
库
供C++调用(非常详细)
MATLAB
具有着很高的计算性能,一些算法用
MATLAB
很容易实现,而用C++很难实现,如果想在C++
中
调用
MATLAB
编写的函数,可以将该函数编译成
库
文件,之后在C++
中
对其进行调用。 本文详细讲解如何将
MATLAB
函数编译成
库
,并在C++
中
进行调用。方法可行,本人亲测。 第一步、
详解C/C++
使用
MATLAB
设计的滤波器系数
应原先转载的一篇文章有好多朋友看的不是很明白,主要原因在于数字信号处理专业功底稍有欠缺,对于滤波器各种结构模型不是太清楚,导致对转载的文章有些异议,这里我重新根据我自己的应用场景,重新编辑一份关于
MATLAB
中
涉及滤波器,生成C语言风格头文件,并在C语言
中
对信号进行滤波的描述。 1、 首先在
MATLAB
workspace控制台输入fdatool或者sptool
中
都有滤波器设计版块,如图1、图2...
用
Matlab
设计Butterworth滤波器后在c/c++
中
使用
设置好参数后,点最下方的“Design Filter”,生成参数。 然后在菜单File下Export导出参数: 导出对话框 点Export后即可在工作区看到导出的数据Hd. 最后
使用
命令行将参数转换为C语言可用的参数表: [b,a]=
sos
2tf(Hd.
sos
Matrix,Hd.ScaleValues) 可得到b和a参数表: b = 1.0e-03 * 0.0231 0...
MATLAB
中
sos
2tf函数用法
sos
2tf函数的功能是将数字滤波器的二阶节(section)数据转换为传递函数形式。
matlab
sos
matrix,
SOS
使用
matlab
生成
SOS
滤波器,应 FPGA的一个小型系统 一定的参考价值 VHDL- -Verilog 262万源代码下载- www.pudn.com...
文件名称:
SOS
下载 收藏√ [5 4 3 2 1]开发工具: VHDL文件大小: 3957 KB上传时间: 2016-07-31下载次数: 0详细说明:
使用
matlab
生成
SOS
滤波器,应用于FPGA的一个小型系统,有一定的参考价值-Using
MATLAB
to generate
SOS
filter, applied to a small system of FPGA, t...
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章