2024年6月5日发(作者:)
2008 2009,30
(
8
)
计算机应用技术
0引言
Matlab是科学计算和工程应用的常用工具,它内置大量
的函数,可以方便的用于各种数学运算。是一种简单
易学、功能强大的程序设计语言。使用这两种工具混合编程
可以利用各自的优点,减少程序开发时间,提高程序的计算能
力和易用性,编写出适合各种需要的应用程序。
在我们实验室开发的SUNIST单粒子模拟系统中,由于
需要进行大量的矩阵计算,同时需要对这些计算结果进行分
析和应用,所以我们使用MatlabR2007b和2005作为
程序开发工具。其中,使用MatlabR2007b进行矩阵计算,使
用2005设计人机界面、管理模拟结果。在SUNIST单
粒子模拟系统中,Matlab和的数据交互和存取是一个
非常重要的问题。因为在计算过程中,需要保存大量的数据
用于以后的分析使用,如模拟的初始条件、粒子轨道上各点的
坐标、速度、磁矩等。
Txt文本文件和xls文件是两种常见的文件格式,具有各
自的优点。Matlab和各自均可以方便的存取这两种
格式的文件。虽然在Matlab中可以通过dlmwrite和xlswrite
函数把数据写入txt文本文件和xls文件,但是我们发现,无论
收稿日期:
2008-04-18
;修订日期:
2008-06-12
。
是将这两条语句写入.m文件通过调用,还是在VB.
NET中直接调用这两个函数都无法实现数据的存储功能,只
能通过其它的存储方法
[
1-2
]
。本文将详细阐述该问题及其解
决方法。
1Matlab和混合编程中通过Matlab存储
Matlab计算结果存在的问题
在Matlab中,函数dlmwrite和函数xlswrite可以将其中的矩
阵变量写入txt文本文件和xls文件。但是,在和Matlab
的混合编程中,这两条语句却无法实现该存储功能。为了说明
这个问题,以dlmwrite函数建立如下的tempWrite.m文件:
tempData=random
(
'Normal',0,10,10,3
)
;;%生成一个随机的
10×3矩阵
dlmwrite
(
'',tempData,'delimiter','t','newline','pc'
)
;
%将数据写入
ReadTempTxtData=dlmread
(
''
)
;%读入temp-
中存储的10×3矩阵
figure;
plot
(
tempData
(
:,1
))
;%利用TempData矩阵的第一列数据作图
figure;
张良,何也熙:Matlab与混合编程中数据存储方式的研究2009,30
(
8
)
2009
plot
(
ReadTempTxtData
(
:,1
))
;%利用ReadTempTxtData矩阵
的第一列数据作图
在MatlabR2007b中,执行tempWrite.m文件,将得到预期
的执行结果。每次执行后,将得到新的文件,并且
文件中存储的数据和画出的图像一致。但是,在Matlab和VB.
NET的混合编程中,数据将无法保存在文件中。
Matlab和混合编程有两种方法,使用COM组件
和使用ActiveX
(
OLE
)
自动化服务
[
3-8
]
。在我们的程序中,使用
ActiveX方法实现对Matlab的调用。所以,此处以Ac-
tiveX方法说明这个问题。在的窗口中,为一个按钮
的click事件编写下列调用tempWrite.m的代码:
DimMyMatlabAsObject
MyMatlab=CreateObject
(
"ation"
)
'创建Appli-
cation对象
e=0'不显示Matlabcommandwindow窗口
e
(
"tempWrite"
)
'启动matlab,调用temp-
Write.m文件
()
MyMatlab=Nothing:
点击该按钮后发现,Matlab每次执行画出的两幅图像均
相同,表明TempData矩阵和ReadTempTxtData矩阵的数据一
致;而多次点击画出的图像均不同,表明TempData矩阵和Read-
TempTxtData矩阵的确是随机生成的矩阵。但是,
文件却从未改变,里面存储的数据仍是上一次单独在Matlab
中执行tempWrite.m文件时存储的数据,该数据与画出的图像
也明显不符。这说明,在的调用中,该.m文件确实执
行了,只是不知道什么原因,文件并没有更新和保存。
将矩阵变量使用Matlab的xlswrite函数保存为xls文件时
也存在这个问题。由于我们的程序需要保存Matlab计算生成
的数据,所以必须采取其它的方法来实现该功能。
2通过txt文本文件进行数据存取的方法
txt文本文件是一种常见的文件格式,查看这种格式的文件
不需要安装其它程序,用Windows系统自带的记事本即可打开。
通过txt文本文件存取数据,具有存取速度快的优点。但是,如
前所述,在和Matlab的混合编程中,无法通过调用Matlab
的函数将Matlab的计算结果直接保存到txt文本文件中。
为了解决这个问题,保存Matlab计算得到的模拟结果,在
我们的程序中,先通过GetFullMatrix方法将Matlab计算得到
的模拟结果通过中的数组保存,然后再将该数组写
入txt文本文件中。由于这些数据日后的分析和研究仍主要
在Matlab中进行,所以保存的格式应便于Matlab的读取。比
如,一个m×n的数组应保存成这样的格式,在txt文本文件中,
n个数据一行,共保存m行,一行中的各数据之间以tab键分开。
在中,存取txt文件常用WriteAllText方法,但是,
用该方法按照上述格式保存的文件用Matlab却无法读取。在
我们的程序中,通过StreamWriter类的write和writeline方法将
数据按照上述格式写入txt文本文件。以保存Matlab计算生
成的粒子轨迹数据outputOrbit矩阵到中为例,说明具
体的存储方法。相关的具体代码如下:
e
(
"StandardTokamak"
)
’执行粒子模拟程序
lMatrix
(
"outputOrbit","base",orbit,tempA
)
'
将结果保存到数组tempA中
'指定要保存的txt文件
DimTempMyFileAsNewFileStream
(
"E:",File-
,
)
DimrAsNewStreamWriter
(
TempMyFile
)
'打开文件
'将数组tempA写入中
Fori=0To999
Forj=0To2
Ifj=2Then
ine
(
temp
(
i,j
))
'使用WriteLine方法写
入数据并换行
Else
(
temp
(
i,j
))
(
Chr
(
9
))
'tab键
EndIf
Next
Next
'参数写入完毕
()
()
'释放相关资源
3通过excel文件进行数据存取的方法
要在中读写Excel文件,需要在项目中添加对
MicrosoftExcel12.0ObjectLibrary”COM组件的引用。具体方
法是点击“项目”菜单的“添加引用”子菜单,在出现的对话框
中选择“COM”选项卡,在其中找到“MicrosoftExcel12.0Object
Library”,选中并点击“确定”按钮。这样,该COM组件就添加
到当前项目中了。
要实现对Excel文件的存取,首先需要在代码中创建Acti-
veX部件及其对象。然后打开欲写入数据的xls文件和具体的
工作表。保存完毕后,保存xls文件并退出excel的自动化服务。
仍以保存Matlab计算生成的粒子轨迹数据outputOrbit矩阵到
orbit表中为例,说明具体的存储方法。相关的具体代码如下:
e
(
"StandardTokamak"
)
’执行粒子模拟程序
lMatrix
(
"outputOrbit","base",orbit,tem-
pA
)
’保存结果到数组中
ation
ok
eet
excelApp=CreateObject
(
"ation"
)
'创建Applica-
tion对象
excelWorkbook=
(
fileName
)
’打
开欲写入数据的xls文件
excelSheet=eets
(
"orbit"
)
’指定欲写
入数据的orbit表
Fori=0To999
Forj=0To2
(
i+1,j+1
)
.value=tempA
(
i,j
)
“
20102009,30
(
8
)
Next
计算机工程与设计ComputerEngineeringandDesign
Matlab的相关函数无法直接将计算结果保存到txt或xls文件
中,保存计算结果需要采取其它方法。本文通过Matlab和VB.
NET混合编程中的具体实例,说明了这一现象,并给出了在
Matlab和混合编程中将Matlab计算结果保存为txt和
xls文件的具体方法,指出了程序开发过程中应该注意的问题。
Txt和xls两种文件格式具有各自的优点和不足,本文比较了
这两种格式各自的特点。
根据本文介绍的内容,结合所开发程序的特点,可以在这
两种存储方法中做出恰当的选择。
Next
()
'保存xls文件
()
'关闭工作表
()
'退出excel服务
4两种存取方式的比较
通过txt文本文件方式存取数据速度比较快,但是为了方
便Matlab的读取,存储数据时需要设计恰当的存储格式。并
且在中,存取文本文件的方法很多,而有些方法保存
的文本文件并不能被Matlab识别,比如本文中提到的WriteAll-
Text方法。在我们的模拟程序中,需要保存的数据比较多,比
如粒子轨道的坐标、粒子的速度、磁矩等,这些需要建立不同
的文本文件,给日后的读取和分析带来了不便。
通过Excel将数据存储为xls文件,不用考虑数据保存的格
式问题,方便通过Matlab读取。并且一次模拟中得到的需要保
存的众多结果,比如粒子轨道的坐标、粒子的速度、磁矩等,可
以存储在一个xls文件中不同的表中,便于日后的读取和分析。
但是,数据量较大时,存储为xls文件需要花费更多的时间,而且
xls文件中的一个表最多只能保存65536行、256列的数据,需要
保存更多的数据时需要存储在其它的表或xls文件中。
通过以上比较可以看出,这两种存取方式具有各自的优
点和不足。在程序开发的过程中应根据各种应用的实际需要
进行恰当选择。
参考文献:
[
1
]
[
2
]
[
3
]
[
4
]
[
5
]
[
6
]
[
7
]
[
8
]
简清华,钟化兰.Matlab的数据文件I/O的实现方法
[
J
]
.计算机
与现代化,2003
(
5
)
:75-77.
张宏立,陈华,李喆.实现VB与MATLAB数据交换的新方法
[
J
]
.计算机应用与软件,2004,21
(
12
)
:51-52.
李俐玲.VB与Matlab相结合混合编程方法的研究
[
J
]
.绵阳师
范学院学报,2004,23
(
5
)
:26-27.
岳玉芳,尤忠生,张玉双.基于COM的VB与Matlab混合编程
[
J
]
.计算机工程与设计,2005,26
(
1
)
:61-62.
欧金成,林德杰,彭备战.通过VB调用MATLAB实现图形和
界面的结合
[
J
]
.计算机工程与设计,2002,23
(
12
)
:64-66.
李永曦,陶伟莲,关立行.在VB6.0中调用Matlab程序
[
J
]
.微机
发展,2004,14
(
1
)
:88-89.
赵耀,吕运鹏.基于COM接口的VC++与Matlab混合编程
[
J
]
.
计算机与信息技术,2007
(
5
)
:57-59.
文小琴,赵志诚,孙志毅.VB与Matlab的动态数据交换及其应
用
[
J
]
.控制工程,2002,9
(
5
)
:88-91.
5结束语
在Matlab和的混合编程中,通过调用
(
上接第1976页
)
4结束语
本文在对当前计算机自动组卷研究现状进行分析的基础
算机应用与软件,2008,25
(
2
)
:49-51.
[
6
]
[
7
]
[
8
]
陆亿红,柳红.基于整数编码和自适应遗传算法的自动组卷
[
J
]
.
计算机工程,2005,31
(
23
)
:232-233.
董敏,霍剑青,王晓蒲.基于自适应遗传算法的智能组卷研究
[
J
]
.
小型微型计算机系统,2004,25
(
1
)
:82-85.
KennethVPrince,RainerMStorn,en-
tialevolution:Apracticalapproachtoglobaloptimization
[
M
]
.
Berlin:Springer,2005:30-34.
[
9
]
Nurhan,lIIRfilterdesignusingdifferential
evolutionalgorithm
[
J
]
.EURASIPJournalonAppliedSignal
Processing,2005
(
1
)
:1269-1276.
[
10
]
王文宏,王凤蕊,潘全科.解决移动计算位置管理问题的差分进
化算法
[
J
]
.计算机工程与设计,2008,29
(
11
)
:2875-2878.
[
11
]
潘全科,王文宏,朱剑英.用差异进化和变邻域搜索解决无等待
流水线调度问题
[
J
]
.中国机械工程,2006,17
(
S2
)
:157-160.
[
12
]
FranceCheong,ingahierarchicalfuzzylogic
controllerusingthedifferentialevolutionapproach
[
J
]
.Applied
SoftComputing,2007,7
(
2
)
:481-491.
[
13
]
郭振宇,安强,程博.差异演化算法在热连轧工作辊温度仿真中
的应用
[
J
]
.系统仿真学报,2007,19
(
21
)
:4877-4880.
上,给出了一种改进的计算机自动组卷问题模型,该模型能更
好地满足了实际组卷需求。基于新出现的差分进化算法,研
究并提出了一种新型的智能组卷算法,且算法具有原理简单、
易于实现、控制参数少、鲁棒性好等优点。实验表明,与简单
遗传算法相比,该算法能更好地解决计算机自动组卷问题。下
一步将对算法的收敛速度进行改进,并将其应用于在线组卷。
参考文献:
[
1
]
[
2
]
[
3
]
[
4
]
[
5
]
王萌,金汉均,王晓荣.集合随机抽选法在智能组卷中的研究
[
J
]
.
计算机工程与设计,2006,27
(
19
)
:3583-3585.
曾一,冉忠,郭永林.试题库中自动组卷的算法及试卷测评策略
[
J
]
.计算机工程与设计,2006,27
(
16
)
:3024-3027.
金汉均,郑世珏,吴明武.分段随机抽选法在智能组卷中的研究
与应用
[
J
]
.计算机应用研究,2003,20
(
9
)
:102-104.
闵应洲,苏德,陈宁江.基于矩阵编码的遗传算法及其在自动组
卷中的应用
[
J
]
.计算机工程,2003,29
(
6
)
:73-76.
王萌,唐培和,李春贵.基于改进遗传算法的智能组卷研究
[
J
]
.计


发布评论