Matlab与VB_NET混合编程中数据存储方式的研究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2008 2009,30
(8)0引言
Matlab 是科学计算和工程应用的常用工具,它内置大量的函数,可以方便的用于各种数学运算。

是一种简单易学、功能强大的程序设计语言。

使用这两种工具混合编程可以利用各自的优点,减少程序开发时间,提高程序的计算能力和易用性,编写出适合各种需要的应用程序。

在我们实验室开发的SUNIST 单粒子模拟系统中,由于需要进行大量的矩阵计算,同时需要对这些计算结果进行分析和应用,所以我们使用Matlab R2007b 和 2005作为程序开发工具。

其中,使用Matlab R2007b 进行矩阵计算,使用 2005设计人机界面、管理模拟结果。

在SUNIST 单粒子模拟系统中,Matlab 和 的数据交互和存取是一个非常重要的问题。

因为在计算过程中,需要保存大量的数据用于以后的分析使用,如模拟的初始条件、粒子轨道上各点的坐标、速度、磁矩等。

Txt 文本文件和xls 文件是两种常见的文件格式,具有各自的优点。

Matlab 和 各自均可以方便的存取这两种格式的文件。

虽然在Matlab 中可以通过dlmwrite 和xlswrite 函数把数据写入txt 文本文件和xls 文件,但是我们发现,无论
是将这两条语句写入.m 文件通过 调用,还是在 中直接调用这两个函数都无法实现数据的存储功能,只能通过其它的存储方法[1-2]。

本文将详细阐述该问题及其解
决方法。

1Matlab 和 混合编程中通过Matlab 存储Matlab 计算结果存在的问题
在Matlab 中,函数dlmwrite 和函数xlswrite 可以将其中的矩阵变量写入txt 文本文件和xls 文件。

但是,在 和Matlab 的混合编程中,这两条语句却无法实现该存储功能。

为了说明这个问题,以dlmwrite 函数建立如下的tempWrite.m 文件:
tempData =random ('Normal',0,10,10,3);;%生成一个随机的10×3矩阵
dlmwrite ('tempTxt.txt',tempData,'delimiter','\t','newline','pc');%将数据写入tempTxt.txt
ReadTempTxtData =dlmread ('tempTxt.txt');%读入temp-Txt.txt 中存储的10×3矩阵
figure;
plot (tempData (:,1));%利用TempData 矩阵的第一列数据作图figure;
收稿日期:2008-04-18;修订日期:2008-06-12。

计算机应用技术
张良,何也熙:Matlab与混合编程中数据存储方式的研究2009,30(8)2009
plot(ReadTempTxtData(:,1));%利用ReadTempTxtData矩阵的第一列数据作图
在Matlab R2007b中,执行tempWrite.m文件,将得到预期的执行结果。

每次执行后,将得到新的tempTxt.txt文件,并且文件中存储的数据和画出的图像一致。

但是,在Matlab和VB. NET的混合编程中,数据将无法保存在tempTxt.txt文件中。

Matlab和混合编程有两种方法,使用COM组件和使用ActiveX(OLE)自动化服务[3-8]。

在我们的程序中,使用ActiveX方法实现对Matlab的调用。

所以,此处以Ac-tiveX方法说明这个问题。

在的窗口中,为一个按钮的click事件编写下列调用tempWrite.m的代码:
Dim MyMatlab As Object
MyMatlab=CreateObject("matlab.application")'创建Appli-cation对象
MyMatlab.visible=0'不显示Matlab command window窗口MyMatlab.execute("tempWrite")'启动matlab,调用temp-Write.m文件
MyMatlab.quit()
MyMatlab=Nothing:
点击该按钮后发现,Matlab每次执行画出的两幅图像均相同,表明TempData矩阵和ReadTempTxtData矩阵的数据一致;而多次点击画出的图像均不同,表明TempData矩阵和Read-TempTxtData矩阵的确是随机生成的矩阵。

但是,tempTxt.txt 文件却从未改变,里面存储的数据仍是上一次单独在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矩阵到orbit.txt中为例,说明具体的存储方法。

相关的具体代码如下:
MyMatlab.execute("StandardTokamak")’执行粒子模拟程序
MyMatlab.GetFullMatrix("outputOrbit","base",orbit,tempA)'将结果保存到数组tempA中
'指定要保存的txt文件
Dim TempMyFile As New FileStream("E:\result\orbit.txt",File-Mode.Create,FileAccess.Write)
Dim r As New StreamWriter(TempMyFile)'打开文件
'将数组tempA写入orbit.txt中
For i=0To999
For j=0To2
If j=2Then
r.WriteLine(temp(i,j))'使用WriteLine方法写入数据并换行
Else
r.Write(temp(i,j))
r.Write(Chr(9))'tab键
End If
Next
Next
'参数写入完毕
r.Close()
TempMyFile.Close()'释放相关资源
3通过excel文件进行数据存取的方法
要在中读写Excel文件,需要在项目中添加对“Microsoft Excel12.0Object Library”COM组件的引用。

具体方法是点击“项目”菜单的“添加引用”子菜单,在出现的对话框中选择“COM”选项卡,在其中找到“Microsoft Excel12.0Object Library”,选中并点击“确定”按钮。

这样,该COM组件就添加到当前项目中了。

要实现对Excel文件的存取,首先需要在代码中创建Acti-veX部件及其对象。

然后打开欲写入数据的xls文件和具体的工作表。

保存完毕后,保存xls文件并退出excel的自动化服务。

仍以保存Matlab计算生成的粒子轨迹数据outputOrbit矩阵到orbit表中为例,说明具体的存储方法。

相关的具体代码如下:MyMatlab.execute("StandardTokamak")’执行粒子模拟程序
MyMatlab.GetFullMatrix("outputOrbit","base",orbit,tem-pA)’保存结果到数组中
Dim excelApp As Microsoft.Office.Interop.Excel.Application
Dim excelW orkbook As Microsoft.Office.Interop.Excel.Workbook
Dim excelSheet As Microsoft.Office.Interop.Excel.Worksheet
excelApp=CreateObject("excel.application")'创建Applica-tion对象
excelWorkbook=excelApp.Workbooks.Open(fileName)’打开欲写入数据的xls文件
excelSheet=excelWorkbook.Worksheets("orbit")’指定欲写入数据的orbit表
For i=0To999
For j=0To2
excelSheet.Cells(i+1,j+1).value=tempA(i,j)
20102009,30(8)计算机工程与设计Computer Engineering and Design
Next
Next
excelWorkbook.Save()'保存xls文件
excelWorkbook.Close()'关闭工作表
excelApp.Quit()'退出excel服务
4两种存取方式的比较
通过txt文本文件方式存取数据速度比较快,但是为了方便Matlab的读取,存储数据时需要设计恰当的存储格式。

并且在中,存取文本文件的方法很多,而有些方法保存的文本文件并不能被Matlab识别,比如本文中提到的WriteAll-Text方法。

在我们的模拟程序中,需要保存的数据比较多,比如粒子轨道的坐标、粒子的速度、磁矩等,这些需要建立不同的文本文件,给日后的读取和分析带来了不便。

通过Excel将数据存储为xls文件,不用考虑数据保存的格式问题,方便通过Matlab读取。

并且一次模拟中得到的需要保存的众多结果,比如粒子轨道的坐标、粒子的速度、磁矩等,可以存储在一个xls文件中不同的表中,便于日后的读取和分析。

但是,数据量较大时,存储为xls文件需要花费更多的时间,而且xls文件中的一个表最多只能保存65536行、256列的数据,需要保存更多的数据时需要存储在其它的表或xls文件中。

通过以上比较可以看出,这两种存取方式具有各自的优点和不足。

在程序开发的过程中应根据各种应用的实际需要进行恰当选择。

5结束语
在Matlab和的混合编程中,通过调用Matlab的相关函数无法直接将计算结果保存到txt或xls文件中,保存计算结果需要采取其它方法。

本文通过Matlab和VB. NET混合编程中的具体实例,说明了这一现象,并给出了在Matlab和混合编程中将Matlab计算结果保存为txt和xls文件的具体方法,指出了程序开发过程中应该注意的问题。

Txt和xls两种文件格式具有各自的优点和不足,本文比较了这两种格式各自的特点。

根据本文介绍的内容,结合所开发程序的特点,可以在这两种存储方法中做出恰当的选择。

参考文献:
[1]简清华,钟化兰.Matlab的数据文件I/O的实现方法[J].计算机
与现代化,2003(5):75-77.
[2]张宏立,陈华,李喆.实现VB与MATLAB数据交换的新方法
[J].计算机应用与软件,2004,21(12):51-52.
[3]李俐玲.VB与Matlab相结合混合编程方法的研究[J].绵阳师
范学院学报,2004,23(5):26-27.
[4]岳玉芳,尤忠生,张玉双.基于COM的VB与Matlab混合编程
[J].计算机工程与设计,2005,26(1):61-62.
[5]欧金成,林德杰,彭备战.通过VB调用MA TLAB实现图形和
界面的结合[J].计算机工程与设计,2002,23(12):64-66.
[6]李永曦,陶伟莲,关立行.在VB6.0中调用Matlab程序[J].微机
发展,2004,14(1):88-89.
[7]赵耀,吕运鹏.基于COM接口的VC++与Matlab混合编程[J].
计算机与信息技术,2007(5):57-59.
[8]文小琴,赵志诚,孙志毅.VB与Matlab的动态数据交换及其应
用[J].控制工程,2002,9(5):88-91.
(上接第1976页)
4结束语
本文在对当前计算机自动组卷研究现状进行分析的基础上,给出了一种改进的计算机自动组卷问题模型,该模型能更好地满足了实际组卷需求。

基于新出现的差分进化算法,研究并提出了一种新型的智能组卷算法,且算法具有原理简单、易于实现、控制参数少、鲁棒性好等优点。

实验表明,与简单遗传算法相比,该算法能更好地解决计算机自动组卷问题。

下一步将对算法的收敛速度进行改进,并将其应用于在线组卷。

参考文献:
[1]王萌,金汉均,王晓荣.集合随机抽选法在智能组卷中的研究[J].
计算机工程与设计,2006,27(19):3583-3585.
[2]曾一,冉忠,郭永林.试题库中自动组卷的算法及试卷测评策略
[J].计算机工程与设计,2006,27(16):3024-3027.
[3]金汉均,郑世珏,吴明武.分段随机抽选法在智能组卷中的研究
与应用[J].计算机应用研究,2003,20(9):102-104.
[4]闵应洲,苏德,陈宁江.基于矩阵编码的遗传算法及其在自动组
卷中的应用[J].计算机工程,2003,29(6):73-76.
[5]王萌,唐培和,李春贵.基于改进遗传算法的智能组卷研究[J].计
算机应用与软件,2008,25(2):49-51.
[6]陆亿红,柳红.基于整数编码和自适应遗传算法的自动组卷[J].
计算机工程,2005,31(23):232-233.
[7]董敏,霍剑青,王晓蒲.基于自适应遗传算法的智能组卷研究[J].
小型微型计算机系统,2004,25(1):82-85.
[8]Kenneth V Prince,Rainer M Storn,Jouni A Lampinen.Differen-
tial evolution:A practical approach to global optimization[M].
Berlin:Springer,2005:30-34.
[9]Nurhan,Karaboga.Digital IIR filter design using differential
evolution algorithm[J].EURASIP Journal on Applied Signal Processing,2005(1):1269-1276.
[10]王文宏,王凤蕊,潘全科.解决移动计算位置管理问题的差分进
化算法[J].计算机工程与设计,2008,29(11):2875-2878. [11]潘全科,王文宏,朱剑英.用差异进化和变邻域搜索解决无等待
流水线调度问题[J].中国机械工程,2006,17(S2):157-160. [12]France Cheong,Richard Lai.Designing a hierarchical fuzzy logic
controller using the differential evolution approach[J].Applied Soft Computing,2007,7(2):481-491.
[13]郭振宇,安强,程博.差异演化算法在热连轧工作辊温度仿真中
的应用[J].系统仿真学报,2007,19(21):4877-4880.。

相关文档
最新文档