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

]

.计