Matlab开发

2024-11-05

Matlab开发(通用9篇)

Matlab开发 篇1

0 引言

MATLAB是一个功能强大的计算机辅助设计软件, 被称为“草稿纸式的科学计算语言”。它具有强大的符号、数值计算、矩阵运算及图形显示功能。在MATLAB实际应用中, 除了工程设计外, 用户经常需要实现在MATLAB环境下自主开发数据库的功能, 完成MATLAB与数据库的通信, 从而充分发挥MATLAB强大的数据处理能力。鉴于此, 本文将介绍开发设计MATLAB数据库的3种方法。

1 基于外部数据源的MATLAB数据库开发

ODBC (开放式数据库连接) 是对多种数据库管理系统设计的统一数据库应用接口 (API) , 由3部分组成:API、驱动程序管理器和驱动程序。ODBC提供了统一的数据库管理系统的标准接口, 从而使编程人员不必关心底层的DBMS, 简化了不同DBMS的数据交换。MATLAB与数据库的接实现的依据就是数据源链桥 (ODBC—JDBC) , 如图1。

1.1 数据库的配置

在建好的外部数据源的情况下, 首先需要完成数据库的配置, 即在系统中配置数据库驱动, 为MATLAB访问外部数据源提供接口。这里以MS Access数据库为例, 介绍基于外部数据源的MATLAB数据库开发步骤。

现已有某数据库CurveDataDB.mdb文件。该数据库由两个数据表组成: SRPResult表, 该表中有well_name、pr_min_f等40个字段, 21118条记录;Cord表, 有well_name、Maxload等47个字段, 50条记录。数据库配置的基本步骤为:①通过windows中的控制面板进入“管理工具”, 选择管理工具中“数据源 (ODBC) ”双击, 进入“ODBC数据源管理器”。ODBC数据源存储了如何与指定的数据提供程序连接的信息;②在“用户DNS”面板中列出了系统中MS Access Database、Excel、Files、DBASE Files等用户数据源;③点击“添加”按钮, 创建新的数据库, 并为数据源选择相应的驱动程序, 本例中选择Driver Do Microsoft Acess (*.mdb) , 点击“完成”进入相应数据库的安装对话框, 并将相应的数据库件作为数据源, 本例中选择的是CurveDataDB.mdb。

配置成功后将在“ODBC数据源管理器”中显示相应的数据库, 如图2所示。

1.2 MATLAB环境下数据库连接

完成数据库驱动配置后, 要在MATLAB中进行数据库的程序连接, 用到的函数及方法如下。

超时设置:设置或获取建立数据库连接的超时时间, 即MATLAB通过ODBC-JDBC驱动建立数据库连接所允许的最大时间, 函数为

logintimeout (Time, Driver)

调用方法:

t=logintimeout (Time, Driver) ;

其中参数Time和Driver为可选, 前者为时间参数, 后者为JDBC驱动器。当不设置参数时, 函数返回当前超时时间;若返回值为0, 表示还没有设置;若没有连接成功, MATLAB则将立即停止重试。

数据库连接:建立MATLAB的JDBC-ODBC连接, 函数为

database (Instance, UerName, Password, Driver, DatabaseURL)

调用方法为

conn=database (Instance, UerName, Password, Driver, DatabaseURL) ;

其中数据库名称Instance为必选参数, UserName、Password是用户名和密码, 若不需要可用空字符来代替, 数据库驱动参数Driver和数据库统一资源定位参数DatabaseURL为可选参数。

连接测试:获取数据库连接的状态信息, 函数为ping (conn) ;其中conn为数据库连接时连接的数据库。

已经建立的CurveDataDB数据库的数据连接程序为

其中AutoCommitTransactions的状态为True, 表明连接成功。

1.3 数据库查询

由于MATLAB数据库支持SQL语句查询, 所以可以满足用户的查询需要。命令分别为:exec、fetch命令和“.”运算操作符。exec命令执行一个有效的SQL查询并打开一个游标;fetch命令把conn连接的数据库中的数据导入到单元数组中;“.”运算操作符用于提取数据库中的数据。

查询本例数据库CurveDataDB中SRPResul表中的pr_min_f字段, 程序代码为

Sqlquery=’select pr_min_f from SRPResult’

curs = exec (conn, sqlquery) ;

Curs=fetch (curs) ;

Data=Curs.data;%返回满足要求的查询记录集。

1.4 数据库记录操作

在数据库中添加新纪录, 即把一个MATLAB单元数组的值输出到外部数据库的新纪录中:

Insert (Conn, Tablename, Filedname, data) ;

其中Conn为已存在的数据库连接, Tablename为要操作的数据表名称, data为单元数组。

更改数据库中的一条记录一般用update命令, 用MATLAB中的单元数组值替代外部数据库中的记录, 方法为update (Conn, Tablename, Fildnames, data, WhereClause) ;

其中WhereClause为SQL语句, 制定要更新的记录。

2 基于database工具箱的VQB访问

MATLAB本身自带的基于database工具箱的可视化数据库访问功能, 可以方便开发者的访问。在MATLAB命令窗口中键入“querybuilder”命令, 进入Visual Query Builder (简称VQB) 界面。

VQB主要适用于已搭建好ODBC-JDBC数据引擎的数据库对象。启动VQB之后, 通过数据源管理器配置的数据库就自动添加到Data Source中, 这样就为数据库开发者省去了前期的数据库连接工作, 且数据表和字段名也能自动显示在界面中, 本文以CurveDataDB数据库为例, 其查询界面如图3所示。

Display功能是VQB的另一个亮点, Display除了能自动完成数据直接显示外, 还提供了plot, stem, stairs, surf等多达38种的图形、图表显示, 以及html超文本的报表显示等多种功能, 为数据分析提供了近乎完美的强大支持, 如图4所示。

VQB在MATLAB6.5后的版本都支持中文的字段名及中文记录, 它第一次将数据库开发功能集成为可视化的界面, 为用户提供了十分方便的数据库访问坏境, VQB的的主要优势集中在查询和显示功能方面, 在数据表的编辑、记录的增删修改等方面的功能还有待扩展。

3 基于结构数组的MATLAB数据库开发

结构数组 (struct) 是一种可将不同数据类型的数据组合在一起的MATLAB数据类型, 它可以动态扩充数据和字段, 数据类型非常灵活, 可以是单个数据元素, 也可以是向量、数组、矩阵甚至还可以嵌套结构数组, 而且不同字段之间的数据类型也不需要相同, 这些都为用结构数组创建数据库提供了可能。

结构数组以指针操作符“.”来连接变量和字段名, 在结构数组中可以直接添加或删除记录和字段, 方法为

Database.fieldname=record;

Database=rmfield (Database, ’fieldname’) ;

其中fieldname为添加的新字段名, record为该字段下的一条记录。有两个命令能够从数组中获得数据, 分别为setfield和getfield函数命令。

例如, 要建立一个销售业绩数据库, 可编写如下代码:

DB.sale.code=[1:9];

DB.sale.in=[100, 270, 590, 58, 121, 99, 12, 498, 79];

DB.sale.out=[37, 58, 480, 28, 40, 35, 2, 186, 29];

DB.sale.price=[10.5, 2.3, 19.5, 25.5, 40.8, 128.0, 1.2, 6.6, 5.5];

DB.sheet.code=DB.sale.code;

DB.sheet.city={‘北京’, ‘太原’, ‘成都’, ‘西安’, ‘广州’, ‘上海’, ‘无锡’, ‘武汉’, ‘桂林’};

此时便建立了一个名为DB的数据库, 它有sale和sheet两张表, sale表中有code、in、out、price 4个字段, sheet表中有code、city两个字段。

结构数组数据库的本质就是一个结构数组, 因此对其进行数据查询和记录操作十分方便, 一般利用MATLAB的通用指令就可以解决问题, 在结构数组数据库中引用数据就像引用变量一样便捷。例如, 要计算DB数据库中商品销售总金额, 并根据进货和销售量做销售业绩图和销售百分比图, 相应代码如下:

DB.cout.sale=DB1.sale.price.*DB1.sale.out;

Y1=DB.sale.in;

Y2=DB.sale.out;

X=DB.sale.code;

subplot (1, 2, 1) ;bar (X, Y1, 'w') ;

hold on;

bar (X, Y2, 'y') ;

xlabel (‘商品代码’) ;ylabel ('商品数量') ;title ('¨销售业绩图’) ;

subplot (1, 2, 2) ;stem (Y2./Y1, 'b') ;

xlabel ('’商品代码') ;ylabel (销售百分比') ;title ('Ï销售百分比图 ') ;

运行结果如图5所示。

运用MATLAB结构数组设计数据库具有运行速度快、数据类型灵活、构造简单、引用便捷等优点, 并且无需引擎接口编程, 这使得数据库具有广泛的应用空间。但是, 它也具有不足, 首先, 对于MATLAB环境的依赖性很强;其次, 该数据库中的数据表和字段名均不能使用中文。

4 结束语

本文介绍了3种开发MATLAB数据库的3种方法, 外部数据源数据库编程开发, 在已拥有外部数据库的情况下, 用户可以实现在MATLAB中直接与此数据库通信, 从而实现在MATLAB环境下, 对外部数据库中的数据进行处理, 充分发挥MATLAB的数据处理功能;database工具箱VQB数据库开发, 为数据分析提供了近乎完美的强大支持;结构数组数据库编程开发方法, 使得引用数据就像引用变量一样便捷。可见, 基于MATLAB数据库的开发具有灵活、多样的特点, 在应用中, 应根据实际情况合理地选择开发方式。

参考文献

[1]陈杰.MATLAB宝典[M].北京:电子工业出版社, 2009.

[2]何强.MATLAB扩展编程[M].北京:清华大学出版社, 2002.

[3]楼顺天.MATLAB程序设计语言[M].西安:西安电子科技大学出版社, 1999.

[4]周燕, 雷小平.MATLAB在统计与工程数据分析中的应用[M].北京:电子工业出版社, 2010.

[5]赵冬生, 赵俊莉.浅谈MATLAB软件在教育统计系统中的应用[J].首都师范大学学报 (自然科学版) , 2006 (8) .

Matlab开发 篇2

matlab学习心得

王信权 39172215 学习matlab是听说它是一个功能强大的数学软件,但是正被微积分的计算缠身,听说有一个高级的计算器当然高兴,以后可以偷懒了,当然现在不能偷懒。听说关于自动化的计算特别复杂,如果有一种软件能帮忙解题,那是一种极大的解脱,有益于缩短研究时间。目前我只知道有三种数学软件,都是国外的,没有国内的,差距挺大的。matlab学起来挺顺手的,比C语言简单。但是深入学习的时候却困难重重,因为很多知识都没有学习,就算知道那些函数,也没有什么用处。老师布置的作业难度大,写一篇实验,大一什么都不会,写一篇这种论文谈何容易。最多也就会一些数值计算、符号计算、简单绘图,根本不会什么实验。学习matlab体会最多的是这个软件的功能强大,好多数学题都被轻易的解出。但是有一点遗憾,不知是我不会用,还是它没个功能,已知空间的电荷分布,求空间的电场分布。其中电场分布是无法用函数表达式表示。我知道计算机肯定可以实现,但是这个软件能不能实现就不知道了,我看过许多资料,但是在这方面没有提到相关信息。

总之,这个软件功能强大,不知什么时候国内才有类似的软件。

Matlab开发 篇3

作为全球科学计算和基于模型设计的软件供应商的领导者, 为应对3G通信系统到4G通信系统的演化所带来的算法复杂度增加等问题, MathWorks公司推出一系列工具, 帮助工程师完成算法开发、仿真与验证的进程, 提高了开发效率、缩短了产品开发周期, 加速了产品上市。

并行计算加速系统仿真

由于4G通信系统的复杂性, 有些参数无法调制。而且针对不同的调制参数和产品型号都要分别做仿真, 还可能引入一些与以往完全不同的模型。这几种因素混合在一起, 造成仿真量急剧加大。而恰恰通信系统设计过程中对仿真速度的要求更为苛刻, 如果采用传统仿真方式, 将耗时非常长。来自上海贝尔.阿尔卡特朗讯股份有限公司的江浩博士表示, 使用MATLAB的仿真工具箱对仿真任务进行动态分配, 并行计算机制的采用可以大幅缩短仿真时间。

“虽然并行计算的概念很早就有了, 而且在不同平台下都支持并行计算。但是大都要求有一个专门的团队对并行计算进行开发, 投入非常大。以往, 我们只能焦急地等待仿真结果的生成。而现在, MATLAB提供了一个很好的工具, 我们只要把接口配置好, 然后交给MATLAB来做就可以了。以前只有计算机专业或者做并行计算的人才会用到的功能, 现在可以让我们很方便地使用。”江浩博士对MATLAB提供的并行计算功能赞不绝口。

此外, MathWorks公司中国区高级应用工程师魏奋先生补充道:“除了任务并行外, MATLAB还支持数据并行, 而且这种并行计算是交互式的。由于系统内存的限制, 数据吞吐量不可能非常大。当有很大的数据需要处理时, 我们可以把数据分割成很多的片段, 放到不同的机器上去运算, 且每个计算机点之间或者计算机之间保持数据通信。这种方式就是数据并行, 它可以解决4G通信系统开发中大数据集合的难题。”

定点设计和代码生成

在通信系统的设计开发过程中, 定点化设计对降低功耗与硬件实现成本具有举足轻重的作用。从工程实现的角度来说, 定点化设计也是非常重要的, 恰当而快捷的定点设计可以显著缩短设计周期。

以往, 在C语言中进行定点化设计很不给力, 因为C语言中缺少定点函数库, 没有内置的上下溢出检查, 没有工具协助分析字长和小数点位置, 没有浮点和定点可视化表示方法……, 这些不足都使得定点化设计困难重重。

MATLAB Coder的推出使得设计者可以直接在MATLAB中执行定点仿真和原型验证。设计者可以在同样的环境中维护浮点和定点设计, 如按照设计者的需求仿真双精度和定点模型, 在设计阶段验证定点的影响等。

不仅如此, MATLAB Coder使得设计工程师可以直接从其MATLAB算法自动生成可读、可移植的C和C++代码, 而无需将MATLAB算法代码手动转换为C和C++代码来进行原型建立、实现和软件集成。这可以形成更快、更高效的系统开发工作流程, 同时减少验证的投入。

matlab课程总结 篇4

学习matlab已经有一年多的时间了,matlab跟其他语言不一样(我用的编程语言,除了matlab就应该是c或c++了,VB也接触过),如果你抱着“把其他语言的思想运用在matlab里面的想法”的话,那么我想,即使程序运行不出错,也很难把握matlab的精髓,也就很难发挥matlab的作用了。

Matlab是一个基于矩阵运算的软件,这恐怕是众所周知的事情了,但是,真正在运用的时候(就是在编程的时候),许多人(特别是初学者)往往没有注意到这个问题,因此,for循环(包括while循环)满天飞„„„„..这不仅没有发挥matlab所长,还浪费宝贵时间。我们往往在初始化矩阵的时候注意到这个问题,懂得了使用矩阵而不是循环来赋值,但是,在其他环节上,就很容易疏忽,或者说,仍然没有摆脱C++的思想。因此,以先用循环(基于C++的思想)来编写代码,然后看看能否用matlab的语言(基于矩阵的思想)来改进。当然,这样做的前提是你对matlab提供的一些函数比较熟悉才行,这些函数在matlab的“帮助”那里搜索“FunctionsUsedinVector izing”就可以找到一些。

对MATLAB的认识和了解

语言简洁紧凑,使用方便灵活,库函数极其丰富。与之前学过的C语言相比较。它的语言简练明了,有时候只要一个字符就能表示出整句语句,不用一步步去读。这种语言简单而实用。每个函数建立一个同名的M文件,如上述函数的文件名为fun.m。这种文件简单、短小、高效,并且便于调试。比如说,函数的赋值。在C语言中,它需要一个个去赋值,x=?;y=?;当变量很多的时候,我们不能一次性的去赋值。并且我们需要注意赋值的类型。而在Matlab软件中,我们只需要知道它的初值,自变量的数值,以及它的范围,就可以用矩阵把整个函数赋值。这减去了我们的工作复杂性,也降低了我们时间花费。

运算符丰富,用Matlab软件设计程序,它更加方便快捷。MATLAB 的基本数据单元是既不需要指定维数、也不需要说明数据类型的矩阵,而且数学表达式和运算规则与通常的习惯相同。因此,在MATLAB环境下,数组的操作与数的操作一样简单。对比C语言,Matlab确实简单不少。我们在编写程序时简便了许多。例如,求1 1 2 3 5 8 13„这个算法。C语言得用许多的语句去循环算这个算法。而Matlab软件可以首先数据初始化,然后用while去循环,做出循环体,就可以你要多少数据,它会给你多少数据。还有在Matlab软件设计程序时,少了很多的定义,减少了复杂度,节省了计算机的暂时内存使用率。就和C语言一样,在语句结束时用“{ }”,Matlab软件中一句话结束时,也需要用end。MATLAB既具有结构化的控制语句(如for循环、while循环),又有面向对象编程的特性。

语法限制不严格,程序设计自由度大。程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。Matlab具有一个强大的工具箱,里面的东西,只要你想要的,你可以毫不犹豫的提取出来,不用想C语言编程中,你要的东西你得用函数调用的形式去借用。这些工具箱提供了用户在特别应用领域所需的许多函数,这使得用户不必花大量的时间编写程序就可以直接调用这些函数,达到事半功倍的效果。MATLAB的图形功能强大。不管你二维图形,三维图形,还是现在流行的四维图形。只要你想要,能编写出来函数式。在短短几秒钟之内,它会呈现在你眼前。另外就是图形的直观性,你在绘编图形时,加上一点修饰,它会自动标注你想要图形的阴影部分。MATLAB 具有二维和三维绘图功能,使用方法十分简便。而且用户可以根据需要,坐标图上加标题。坐标轴标记。文本注释及栅格等,也可以指定图线形式(如实线、虚线等)和颜色。常用的快捷键(用【】表示)或命令: 1.在命令窗口(CommandWindow)中:

1)【上、下键】――切换到之前、之后的命令,可以重复按多次来达到你想要的命令

2)clc――清除命令窗口显示的语句,此命令并不清空当前工作区的变量,仅仅是把屏幕上显示出来的语句清除掉

3)clear――这个才是清空当前工作区的变量命令,常用语句clearall来完成 4)【Tab】键――(转自版友心灯)在[email]matlab@hit.edu.cn[/email]看到的:在command窗口,输入一个命令的前几个字符,然后按tab键,会弹出前面含这几个字符的所有命令,找到你要的命令,回车,就可以自动完成。目前讨论结果是:matlab6.5版本中,如果候选命令超过100个,则不显示。而在matlab7以后版本中,则没有这个限制,均可正常提示

5)【Ctrl+C】(或【Ctrl+Break】)――在matlab程序运行过程中,可能由于程序编写的失误,导致程序不停的运行,在命令窗口输入“Ctrl+C”可以将运行的程序停下来,而不需要将整个Matlab程序关掉。不过进行此操作的前提是能够激活切换到命令窗口才行。2.在编辑器(Editor)中:

1)【Tab】(或【Ctrl+]】)――增加缩进(对多行有效)2)【Ctrl+[】--减少缩进(对多行有效)

3)【Ctrl+I】--自动缩进(即自动排版,对多行有效)4)【Ctrl+R】――注释(对多行有效)5)【Ctrl+T】――去掉注释(对多行有效)

6)【Ctrl+B】――括号配对检查(对版本6.5有效,但版本7.0无效,不知道是取消了还是换了另外的快捷键)7)【F12】――设置或取消断点 8)【F5】――运行程序Coming: 1.help:最有效的命令

1)命令窗口直接敲“help”,你就可以得到本地机器上matlab的基本的帮助信息。2)对于某些不是很明确的命令,只知道大体所属范围,譬如说某个工具箱,直接在命令窗口中敲入

Help toolboxname,一帮可以得到本工具箱有关的信息:版本号,函数名等。3)知道函数名,直接用help funname就可以得到相应的帮助信息。2.see also:不可小瞧的关联

在用help命令的时候,可能因为我们开始估计的方向不一定完全正确,在列出的帮助信息中没有直接给出的我们要找的东西,但是我们一定不要忽略了在帮助的最后列出的see also。3.lookfor:matlab中的baidu 当我们很多什么头绪都没有的时候,我们可以求助于它,往往会收到意想不到的效果。

譬如:曾经在gui编程的时候,遇到过这样一个问题:想拖动鼠标时,要出现一个方框,就像你在桌面上拖动鼠标,会出现虚线框一样。4.get,set:GUIobject属性的帮手

在GUI编程中,我们可能有时候想改变某些object的属性,或者想让它安装自己的想法实现,但是我们又不记得这些object的属性,更别提怎么设置他们的值了。这时,可以用get(handles)得到此对象的所有的属性及其当前值。用set(handles)可以得到对象所有可以设置的属性及其可能的取值。找到我们需要的属性名字和可能的取值之后,就意义用get(handles,‘propertyname’)取得此属性的值,用set(handles,‘propertyname’,values)设置此对象此属性的值。

5.Edit:查看m源文件的助手

在应用matlab过程中,可能我们想看看它的m源文件,当然用editor定位打开也行,但是我经常采用的是直接在command窗口中用edit funname.m,就省去了定位的麻烦。

6.其他常用命令:which,what等

which:定位指定的函数和文件,最好带上参数-all,以便显示更加多的信息 what:获得指定目录的m文件,mex文件以及mat文件名列表 MATLAB学习经验

悟性。上小学最喜欢的一个字就是悟,以前以为悟就是一个人的慧根。其实不是这样的,所谓悟就是想。要保持大脑的活力,要不停的想。有很多事情,技术的、非技术的问题,都是可以想明白的。只有不停的想,才能想明白,想透彻。我经常就在想MATLAB的对象属性,所以很熟悉对象属性。

勤奋。我这个人也比较懒惰的,但是我对自己喜欢的事情还是有一种韧性。我对勤奋的理解是,每天多学一些,多积累一些。在别人谈小资的时候,想想一些现实的技术。看看国外倾泻而下的标准、技术、商品,如何突围?只有靠我们每个人的勤奋。每当想起我们那些在国外做了七八年的竞争对手,要在中国打败他们,就只有靠时间、压力和汗水的积累。喜欢上海的一个理由,就是这里的快节奏,可以不会让我那么懒惰。有一些事情我想是可以值得骄傲一下的:有半年时间,平均每天学习MATLAB到半夜两点以后;有两个除夕夜,都是在编写程序。

坚持。做潜力开发的培训,往往要培养一个人永不放弃的斗志和信念。搞MATLAB也是这样,涉及的领域太多,每个领域里面都缺乏足够的专家分布在你周围。那么我们很难有机会接触到真正的高手,对我们的技术细节一一指点。在遇到实际问题时,就只能靠自己去摸索。常常是再坚持一两个小时,就能够解决你的问题。最大的成就感,就在付出了极大的心血和耐心,才取得一个艰难的小胜利。(真的做完一件事情,也许那感觉就是一个字:累)印象很深刻的一件事情,有一次SCIE与我聊起一个混合编程的问题,喋喋不休的讲完了第七种方案(因为好几个我没有听懂),依然不能解决问题,又想到了第八种方案。如果没有坚持,一般人也就能够想到第三步、第四步,如何能够达到圣人的境界?

付出。这也许是一个过时的话题,但是我坚信,付出依然能够给我们带来可观的回报。付出,不是今天老板给了你薪水,你可以继续为他工作一个月。我所理解的付出,是每天为公司、国家多工作两个小时。有一些规则是显性的,有一些规则不是那么容易发现的,是潜规则。我不是倡导无私,我只是希望通过自身的努力,提高公司的竞争力,提高民族的竞争力。在这个过程中,也相应的提高了作为个体的技术工程师的竞争力。现代的竞争是激烈而残酷的,只有熟悉地缘政治的人,才能有深刻的理解。没有朋友感兴趣,就培养这个群体。土壤厚重了,我们这些生物才能生长得更茂盛一些!

也许这就是一种正常的生存状态吧,不知道是否有更好的办法?如果你要做很多事情,就必须协调好。而我不太擅长此事,所以在很多事情之间穿梭。常常是同时做两件事情,计划着第三件事,夜里想着第四件事。时间长了,反倒习惯了一种忙乱的状态,可以做很多事情,做好一件马上就是下一件。只有等到这些都告一段落,就可以好好的放松一下了。

多动手写程序、调试。如果懒得写程序,调试程序,永远无法提高。我个人认为调试程序更重要。有些人可能在一个程序调试几下出不了结果时,就可能喜欢去问别人,我不太赞同这一做法。其实,凡事往往经过痛苦折磨后,才会让你印象深刻,收益更大。我建议在你觉得用尽你努力后,仍然无法有结果时,才去请教别人。我当初一个程序调试过一两个星期都有过。在这论坛上,你可以发现不少好的问题,对这些问题,不要光看别人如果解决,也不要光想怎么解决,自己坐下来,动手自己解决一下,那你就会把不是你的知识变成自己的知识。善于利用MATLAB的帮助。可以这么说,任何问题都可以在MATLAB的帮助里找到解决的办法。问题不论大小,都是由更小的问题组成,把大问题化为小问题,小函数,然后再到MATLAB帮助里去找这种小问题,小函数的用法。说实话,MATLAB里的函数太多,我也经常忘记一些用法,这时HELP就帮忙了。

善于向别人学习。在你解决一个问题后,你可能会发现别人有更简便的方法解决,更强的函数,就是你向别人学习的时候。

遗憾如果我能够与Mathworks的人直接沟通,也许能够了解更多的技术细节。我们对MATLAB的很多困惑,也许就是他们曾经面对的问题。比如Compiler的发展方向,我想当初这些技术工程师也做了很多争论。如果他们能够得到一些其他的反馈信息,也许在编译器方面做得更好。

时间总是一种稀缺资源,与同行的交流还不够充分。比如对某些领域的了解,依然很片面。看到很多朋友,对一些相关行业和领域,都能侃侃而谈,实在是一种羡慕。数学基础实在不好,很多算法问题总是想不明白。数学天才们的思维训练,看来是没有机会接受了。

随着对技术的理解加深,有一些看法在逐步转变。以前以为一个好东西,总能够保持其优势。然而现实生活中,技术发展太块了,仅有这些还不够。不选择更新,只有被淘汰,无论是技术,还是做技术的人。

MATLAB真是一个好工具,也只能是一个好工具。它可以作为一个平台,承载知识和算法,那么核心的竞争力将是它实现的技术和产品。现在的公司,主营业务是通信软件。以后的职业规划,将更多的与通信沾边了。又是一个陌生的领域,又是一个必须要全力以赴的专业。

Matlab开发 篇5

数字水印 (Digital Watermarking) 技术是将一些标识信息 (即数字水印) 直接嵌入数字载体 (包括多媒体、文档、软件等) 当中, 但不影响原载体的使用价值, 也不容易被人的知觉系统 (如视觉或听觉系统) 觉察或注意到。数字水印主要包括以下内容:水印的嵌入与水印的提取或检测。数字水印可以按照多种标准进行分类。本文主要讲述两种数字水印即:基于DCT的鲁棒水印与DWT脆弱水印。本文通过对这2个的实例详细介绍展示了数字水印的嵌入与检测提取过程。

2数字水印系统的组成

一个数字水印系统一般包含3个基本方面:水印的生成、水印的提取或检测。数字水印技术实际上是通过对水印载体媒质的分析、嵌入信息的与处理、嵌入方式的设计、嵌入调制的控制等几个关键技术环节进行合理优化, 寻求满足不可感知性、安全可靠性、稳健性等诸条件约束下的准优化设计问题。该系统的输入是水印信息W、原始载体数据I和一个可选的私钥/公钥K。其中原始载体数据I代表要保护的多媒体产品, 如图像、文档、音频、视频等;水印信息W可以是任何形式的数据, 如字符或栅格;二值图像、灰度图像或彩色图像;3D图像等等。水印生成算法G应保证水印的唯一性、有效性、不可逆性等属性。密钥K可以用功来加强安全性, 以避免未授权的恢复和修复水印。所有的实用系统必须使用一个密钥, 有的甚至使用几个密钥的组合。

水印的嵌入算法很多, 式 (2-1) 给出了定义水印嵌入过程的通用公式:

式中Iw表示嵌入水印后的数据;I表示原始载体数据;W表示水印集合;K表示密钥集合。

图2-2是水印的检测过程。改图给出了定义水印检测过程的通用公式如下。

需要原始载体数据I进行检测:

需要原始水印W进行检测时:

无需原始信息即可进行检测:

式中W`表示估计水印;D为检测水印算法;Iw`表示在传输过程中受到攻击后的水印载体数据。

水印相似度检验的通用公式为:

式中W`表示估计水印;W表示原始水印;Sim表示不同信号的相似度。

3基于DCT域的鲁棒水印

在图像压缩理论中, DCT变换占据了重要的地位, 无论是静态图像还是动态视频的压缩都用到了DCT (JPEG, MPEGI) .它的优点是运算简单、速度快.

3.1水印的嵌入

基于DCT的鲁棒水印嵌入流程图如图1:

原始图像按8×8分块。首先计算所有子块的方差值, 并选择方差值最大的前n块Xn, 然后依据系统密钥K在其DCT中频嵌入随机序列pn_sequence_zero, 最后通过子块的DCT逆变换生成含水印的图像。K与pn_sequence_zero配合使用用于嵌入位置的选择。具体方法如下:

1.

对原始图像进行分块并做DCT变换

2. 基于纹理掩蔽特性的块分类

为了实现原始图像和嵌入水印后的图像之间的感知相似性, 应该将水印信号尽可能的嵌入到图像中纹理较为复杂的子块中。此处将子块的方差值作为衡量子块纹理的复杂程度。计算字块的平均灰度m和方差, 公式如下:

方差的大小反映了块的平滑程度。当较小时, 认为块比较均匀, 反之, 则认为块包含着较为复杂的纹理或边缘。我们使用MATLAB的SORT函数对方差值进行从小到大排序, 从中找到纹理复杂的子块。

3. 水印的产生和嵌入

将二维水印图像2 (a) , 组成一维行向量, 作为水印信息。

通过对人类视觉系统的研究, 发现人眼对于低频部分的噪声相对敏感, 为了使水印不易被察觉, 应将水印嵌入到较高频部分;但是将水印信息嵌入到高频部分, 很容易因量化、低通滤波等处理而丢失信息, 影响水印的鲁棒性。为了解决低频和高频的矛盾, 本人采用了一种基于DCT中频的数字水印技术。嵌入位置由K与sequence参数决定。

4.嵌入程序

效果如图2, 原始图使用数字图像标准图lena, 在嵌入了图2 (a) 的水印图像后形成了b图的嵌入后图像。从两幅图的对比可以看出在原始宿主图像嵌入水印图像后基本上没什么视觉上的区别, 其峰值信噪比Psnr=34.1556。Psnr越大, 不可见性越好, 因此基于DCT中频的数字水印方法具有较好的不可见性。

3.2 水印的提取

基于DCT的数字水印提取过程基本上可以看做是嵌入过程的逆过程, 主要有以下步骤:

1.原始图像和待检测图像在DCT域进行求差运算, 比较相关性, 确定序列message_vector。

2.根据图像块的方差值的大小, 确定纹理块, 从而确定水印曾经的嵌入位置。

3.与嵌入时的步骤相似, 根据序列message_vector以及纹理块的次序形成一维水印序列。

4. 将水印序列重新组成二维水印恢复图像, 并据此进行图像的版权认证。

提取的水印图像效果如前图。一般说来, 一个有效的数字水印有3个基本的要求: (1) 安全性, 即水印应该是秘密的, 只有授权方才可访问; (2) 鲁棒性, 即对各种可能的信号处理和恶意的攻击都具有抵御能力; (3) 不可见性, 即既不影响载体图像的质量, 也保证水印添加与否的不可知性。用于版权认证的算法必须具有较好的鲁棒性, 即数字水印必须很难被清除。通过上述算法生成的图像在经过一定量的图像裁减或者适度的JPEG压缩后仍能从中提取出嵌入水印图像的大致轮廓, 表明此算法有较好的鲁棒性。

4基于DWT域的脆弱水印

小波变换是当前数学中一个迅速发展的新领域, 是最近十几年才发展并迅速应用到图像和语音分析等众多领域的数学工具, 它同时具有理论深刻和应用广泛的双重意义。它是一种新的可达到时 (空) 域或频率域局部化的时一频域分析方法, 因而能有效地从信号中提取信息, 通过伸缩和平移等运算功能对函数或信号进行多尺度细化分析, 解决了其它变换不能解决的许多问题, 是继傅里叶分析之后的一个重大突破。小波变换可分为连续小波变换 (CWT) 和离散小波变换 (DWT) 。随着新一代图像压缩标准JPEG2000提出, 小波变换越来越受到重视。在数字水印和信息隐藏中, 已经出现不少优秀的基于小波变换的算法, 并且多数要优于相同条件下基于DFT、DCT等传统变换的算法。

4.1 DWT水印的嵌入

水印的嵌入过程如下:

⑴原始图像进行一级Haar小波变换。Haar小波是最早最简单的紧支撑小波, 所有的小波讨论都是从Haar开始的。

⑵在原始图像小波变换分解后的低频部分嵌入水印信息。水印图像大小为原始图像的1/4.若二值水印图像为0, 则对应的近似系数CA增加1, 完成水印的嵌入。

⑶将改变了的低频系数矩阵与原有的3个高频系数矩阵进行一级Haar小波逆变换, 生成并显示含水印的图像。由于近似系数作了修改, 小波变换后的系数极可能不再是整数。为此, 使用round函数取整, 再转换为uint8类型存储、显示图像。

⑷计算含水印图像的峰值性噪比。

生成的图像如下:

4.2 水印的提取

水印的提取过程如下:

⑴原始图像、待检测图像一级Haar小波变换。

⑵将原始图像、待检测图像分解后的低频系数CA相减, 提取水印, 完成篡改检测, 实现脆弱水印功能。

5小结

通过以上的研究和测试, 在此可以把小波分析方法和傅里叶变换进行一个比较, 从中可以显示出小波变换比傅里叶变换是有优势的。

⑴傅里叶变换的实质是把能量有限的信号f (t) 分解到以{e}为正交基的空间上去;小波变换的实质是把能量有限的信号f (t) 分解到由小波函数所构成的空间上去。

⑵傅里叶变换用到的基本函数只有sin (ωt) 、cos (ωt) 、或exp (iωt) , 具有唯一性;小波分析所用到的小波函数则不是唯一的, 同一个工程问题用不同的小波函数进行分析时结果相差甚远。小波函数的选用时小波分析应用到实际中的一个难点问题也是分析研究的一个热点问题, 目前往往是通过经验或不断地实验, 将不同的分析结果进行对照分析来选择小波函数。一个重要的经验是根据待分析信号和小波函数的相似性选取。

⑶在频域中, 傅里叶变换具有较好的局部化能力, 特别是对于那些频率成分比较简单的确定性信号, 傅里叶变换很容易把信号表示成各频率成分的叠加和的形式, 但在时域中, 傅里叶变换没有局部化能力, 无法从信号f (t) 的傅里叶变换F (ω) 中看出f (t) 在任一时间点附近的形态。

⑷在小波分析中, 尺度α越大相当于傅里叶变换中ω的值越小。

Matlab开发 篇6

由于数字图像处理在医学领域的应用非常广泛,加之其涉及的知识面很广,学生不仅要掌握信号与系统和数字信号处理的基本知识和理论,还必须具有一定的编程基础。学生在该课程的理论学习中会碰到很多问题和难点,因此,为了帮助学生深刻理解、掌握理论基础和图像处理算法,本文介绍了一种基于Matlab的GUI界面数字图像处理实验平台。该平台能够在界面输入空间域算子,实现图像的空间域滤波处理,而且可以在频域选择不同的滤波器类型,对图像在频率域进行数字滤波。该实验平台能够帮助学生更直观和生动的掌握数字图像处理算法的基本理论和实验方法。

1 实验平台的开发

实验平台有两大模块,分别为空间域滤波和频率域滤波。实验平台模块如图一所示。实验平台界面如图二所示。

学生在使用该实验平台时首先选择一副需要处理的数字图像,打开文件的代码如下:

打开图像后,学生可以选择在频率域或空间域对图像进行数字滤波,如图三和图四所示。在界面左边显示原始图像,界面的右边显示滤波结果。在界面的左下方,学生可以输入空间域算子的参数。学生对数字图像处理结束后,可以保存处理后的图像。

空间域滤波Matlab代码如下所示:

理想低通频率域滤波Matlab代码如下:

2 结束语

由于Matlab本身自带了丰富的数字图像处理函数,且Matlab的GUI界面编程相对于其他语言比较简单。所以该实验平台容易被学生掌握,并且可以让学生在该实验平台的基础上,对它进行二次开发和修改,提高学生的实验动手能力。

摘要:本文基于Matlab的GUI界面设计开发数字图像处理实验平台。该平台不但能够在界面输入空间域算子,实现图像的空间域滤波处理,而且可以在频域选择不同的滤波器类型,对图像在频率域进行数字滤波。该实验平台能够帮助学生更直观和生动的掌握数字图像处理算法的基本理论和实验方法。

关键词:数字图像处理,Matlab,GUI

参考文献

[1]张康,杜建强,张鹤林.在空间域获得同态滤波模板的新方法[J].计算机与现代化,2007,(03):81-83,96.

[2]冈萨雷斯.数字图像处理[M].北京:电子工业出版社,2005.

[3]王帆,刘慧.基于Matlab GUI的数字图像处理实验平台设计[J].中国科技信息,2011,(07):124-125.

Matlab开发 篇7

一、磁场定向算法 (FOC) 模型简介

本例中对于FOC算法, 采用Id=0的转速和电流闭环控制方案, 速度环具有增强系统抗负载扰动的能力, 根据速度给定和速度反馈, 通过速度调节器输出电流转矩分量给定值。电流环为双环结构分别调节电流转矩分量与电流励磁分量跟踪给定值的变化, 快速提高系统的响应性能。经两个电流调节器输出的d-q轴电压分量合成为一个电压矢量, 通过svpwm调制, 直流母线电压将以PWM波的方式加到电机上。

模型中用到的模块是由matlab中提供的TIC2000系列的Digital Motor Control (DMC) 和IQMath库构建, 这些库是专门针对TIC2000系列处理器编写, 生成代码的效率可以和汇编语言相媲美。Target Preference设置为F2812, 具体设置和处理器相一致。在模型中设置Rate Tranation2模块输出采样时间为0.01s, 为转速闭环的采样周期。电流环采用系统的采样时间5E-5s即PWM频率为20KHZ。由于TIC2000系列处理器为定点处理器, 所以本例在建模时是按照定点模型建立。对于FOC所有输入信号都采用的是Q17格式, 所以空间矢量发生模块输出的也是Q17格式的数据, 但是TIC2000中PWM模块默认的输入数据是Uint16格式, 所以要进行数据格式的转换, 这一功能由PWM Scaing模块实现。

二、处理器在环测试

处理器在环测试是在Simulink中搭建被控对象的模型, 而将控制器算法代码下载到目标处理器中去执行。

系统输入端口信号是利用永磁同步电机控制系统仿真时产出的数据, 通过logsout数据结构记录, 然后导入到PIL测试模块中, 最后记录其输出的PWM波形。图中的FOC子系统为Simulink搭建的算法模块, FOC1是有FOC子系统生成的PIL测试模块。通过Inspect Logged Signal工具观察其具体波形, 结果如图1所示:

通过观察结果可知其PWM和PWM_PIL波形误差为零, 验证了算法生成代码在处理器中执行的正确性。

三、总结

基于模型的设计优势在于算法的早期验证, 使得开发者可以将主要精力放在算法开发上, 代码则由Matlab自动生成, 很好的提高工作效率。在实际的开发中, 将算法生成为函数进行调用, 一般底层驱动和控制流程使用汇编语言或者C手工编写。如果通过Matlab对底层驱动建模则十分复杂, 得不偿失, 控制流程开发也没有C语言灵活。

参考文献

[1]赵纪倩, 贾要勤.基于Matlab/Simulink的DSP控制代码开发技术[J].电力电子技术, 2010, 12:59-61

[2]刘杰.基于模型的设计及其嵌入式实现[M].北京:北京航空航天大学出版社, 2010

[3]The MathWorks, Inc.Embedded Coder Guide, April 2011

Matlab开发 篇8

MATLAB已成为世界使用最广泛的编程技术语言之一[4,5]。本文研究了利用MATLAB强大的功能实现煤矿开采沉陷预计和根据实测数据求取参数, 并将该系统应用于某煤矿开采对地面河堤的影响分析。

1 开采沉陷预计的方法

我国现在最常用的是概率积分法, 因其算法简单、结果可靠, 目前已成为我国较成熟、应用最广泛的预计方法之一[6]。本文主要介绍任意形状工作面开采影响的预计该方法是将任意形状工作面顺煤层走向划分成若干矩形状工作面, 用一个或多个矩形状工作面代替任意形状工作面。在预计任意点在走向和倾向方向的时候, 由于我国煤矿基本都是充分采动, 且走向和倾向都达到充分采动, 所以计算走向和倾向时都是采用两个半无限开采相减得到, 这就是本系统设计的原理。

2 运用MATLAB开发系统中遇到的关键技术

1) 此次系统开发主要采用了MATLAB中的概率积分法函数方法。2) MATLAB对工作面可以自动地划分为很多格网, 而MATLAB中的meshgrid命令就是对一定的区域进行平面地划分, 划分得到的平面格网可以用来绘制等值线和三维立体图。3) MATLAB具有很强的图形功能, 它可以根据计算的数据得到数据的二维、三维等图形。4) 系统中利用三个已知值: 工作面的走向方位角和左小角点的坐标, 将CAD图中的坐标转换为计算的坐标。5) 求参部分利用了最小二乘拟合曲线的方法, 将实测数据和拟合数据尽可能的吻合起来。

以上就是在预计和求参部分编写函数中的关键技术, 其他的传统高级编程语言, 如果要实现这些功能必须编写大量的程序, 而这些在MATLAB中只需要很简单的几个函数即可实现, 大大减少了工作量, 这就是运用MATLAB进行开采沉陷预计系统开发的优势。

3 系统程序正确性的检验

3. 1 开采沉陷预计部分的程序检验

采用参考文献[8]142 页例4-2, 工作面采厚m = 1. 45 m, 倾角a = 12°, 工作面倾向斜长D1= 200 m, 走向长D2= 300 m, 下边界采深H1= 321. 9 m, 上边界采深H2= 279. 3 m。已知本矿区概率积分法参数的经验值为: q = 0. 76, tgβ = 2. 0, b = 0. 30, s = 0. 1H, 开采影响传播角 θ = 90° - 0. 7α, 计算A点地表移动和变形值 ( A点距上边界50 m, 距右边界200 m) 。

由题目可知: 工作面下山方向左下角的坐标 ( X0, Y0) 为 ( 0, 0) , 工作面走向方位角为90°, A点坐标为 ( 150, 100 ) 。表1 给出了手算和程序计算结果, 计算的最大相对误差未超限说明系统预计部分的程序是正确的, 可以进行相应的开采沉陷预计。

3. 2 简单求取预计参数部分的程序检验

工作面采厚2. 0 m, 煤层为水平煤层, 工作面倾向长为120 m, 走向长为140 m, 煤层的平均采深为100 m, 求取的参数见表1。由表1 说明系统求参部分的程序是正确的, 可以进行相应的求参。

4 工程实例的应用分析

4. 1某煤矿开采沉陷预计分析

华东某煤矿的103上07 工作面开采3上煤, 采用综放开采, 采深426 m ~ 474 m、平均450 m; 工作面走向长1 014 m ~ 1 148 m, 倾向长80 m ~ 142 m, 工作面位于矿井的东南部, 工作面西部的上方有一条河流穿过, 3上煤厚度5. 74 ~ 6. 50、平均6. 15 m, 煤层结构简单, 煤层倾角2° ~ 21°、平均10°下面需要我们对开采此煤层时进行一定的预计, 并分析其开采对上部河堤的影响。

根据开采区其他工作面参数的预计情况, 结合103上07 工作面地质采矿条件, 通过计算, 最终确定采用的预计参数为: 下沉系数q = 0. 64, 主要影响角正切tgβ = 1. 79, 开采影响传播角 θ = 88°, 拐点偏移距为s = 0. 03H, 水平移动系数b = 0. 30。

根据103上07 工作面的具体地质采矿条件, 采用分析获得的预计参数和本开采沉陷预计分析系统计算的结果, 对103上07 工作面开采后的地表移动变形情况进行了预计, 并结合实地情况分析地表变形对工作面上河堤的影响。

由于河堤是沿南北方向的, 沿东西方向河堤比较宽厚, 所以对河堤的影响主要表现在南北方向, 东西方向几乎没有什么影响, 具体影响如下: 对河东堤的最终影响为: 河堤最大下沉2. 0 m, 对东堤的总影响长度为742 m。最大变形值为: 倾斜12 mm/m, 曲率- 0. 18 mm/m2~ 0. 08 mm / m2, 水平移动900 mm, 水平变形- 13 mm / m ~ 6. 0 mm / m, 最大倾斜和水平移动指向采空区中心。

对河西堤的最终影响为: 河堤最大下沉2.1 m, 对西堤的总影响长度为738 m。最大变形值为: 倾斜12 mm/m, 曲率-0. 18 mm/m2~0. 08 mm / m2, 水平移动900 mm, 水平变形- 13 mm/m ~ 6. 0 mm/m, 最大倾斜和水平移动指向采空区中心。

4. 2 对河堤的治理措施

由于煤矿的开采会对河堤造成一定的损害, 我们必须事先做好治理措施, 具体的措施如下:

1) 在没下沉之前, 事先准备好治理所用的土料, 与此同时对河堤进行预加固; 2) 开采时, 要时刻监测河堤的变化; 3) 对由于年久而出现的裂缝要在洪期到来之前进行处理; 4) 对由于沉降而造成的裂缝的防护, 要充分利用原有河堤, 采取迎风坡复土加固; 5) 对于破坏比较严重的河堤, 要采用一定专业的技术进行处理, 例如: 采取开挖回填重筑堤防的方法进行修复; 6) 对于河口冲刷区, 要采用砌石护岸。

5 结语

1) 此次开发的预计系统理论基础可靠, 可以满足工程需求。2) 充分发挥了MATLAB的编写效率高、编写简单的优势, 而且很好地利用了MATLAB强大的内置函数和图形功能, 大大地减少了工作量。3) 可以根据工作面上的实测数据求取概率积分法预计的参数。4) 将其很好地应用于某煤矿进行开采沉陷预计分析, 并根据预计结果对地面的河堤破坏进行分析。

摘要:介绍了利用MATLAB开发开采沉陷预计系统的原理及关键技术, 从开采沉陷预计与求取预计参数两方面, 检验了该系统程序的正确性, 并将该系统应用于某煤矿, 预计分析了煤矿工作面开采对地面河堤的影响, 最后提出了河提的治理措施。

关键词:煤矿,MATLAB,开采沉陷,河堤

参考文献

[1]谭志祥, 邓喀中.建筑物下采煤理论与实践[M].徐州:中国矿业大学出版社, 2007.

[2]吴侃, 周鸣.矿区沉陷预测预报系统[M].徐州:中国矿业大学出版社, 1999.

[3]朱伟庆, 郭达志.煤矿区地表沉陷及其可视化新方法[J].矿业安全与环保, 2006 (6) :10-12.

[4]孙祥, 徐流美, 吴清.MATLAB7.0基础教程[M].北京:清华大学出版社, 2005:5.

[5]求是科技.MATLAB7.0从入门到精通[M].北京:人民邮电出版社, 2006:3.

[6]邹友峰, 邓喀中, 马伟民.矿山开采沉陷工程[M].徐州:中国矿业大学出版社, 2003.

[7]李培现, 谭志祥, 齐公玉, 等.基于MATLAB的开采沉陷预计系统[J].中国矿业, 2008 (11) :72-76.

Matlab开发 篇9

随着计算机技术的迅猛发展和教育教学现代化的需要,计算机正逐渐走进学校,走进课堂。计算机辅助教学以其灵活、生动、形象、鲜明的文字、声音、图形和动画等丰富多彩的表现形式,使物理实验教学内容化难为易[1]。计算机辅助教学的出现改变了传统的实验教学的模式,促进教师教育观念的转变,通过人机交互、信息共享,拓展了学生的视野,很好地培养了学生创造性思维能力。

将计算机仿真技术用于光学实验教学,不受实验仪器和实验场所的限制,可以通过改变实验参数获得不同的实验结果,方便教师课堂演示,使课堂教学内容形象化,表现手段多样化,创造一个生动活泼的学习氛围,让学生能够结合形象的实验现象更加深刻理解光学理论。开发光学实验的仿真模拟系统,并将其运用到物理光学的教学和实验当中,可以进一步提高大学物理实验教学的现代化水平。

但是,由于光学实验理论的复杂性、高水平仿真图像和人性化仿真界面的要求,目前国内融合光学实验的仿真系统开发还不多见。在此以VB为界面平台,Matlab强大的绘图、计算功能为基础,解决了VB和Matlab的接口技术,开发出了光学实验的仿真系统,并用于辅助实验教学。

1 开发环境的选择及技术

Visual Basic是由微软公司开发的可视化编程语言之一,简单易学而且功能丰富,能够迅速有效地编制优良的可视化界面。Matlab是美国MathWorks公司推出的交互式、面向对象的程序设计语言,擅长处理数值计算和系统模拟仿真[2]。但是Matlab程序的执行速度比较慢,而且在界面设计方面远远比不上VB,VC等软件。鉴于二者各自的优势,通过VB和Matlab的接口技术将VB功能强大的可视化界面与Matlab的绘图功能结合起来,实现二者混合编程,即可开发出模拟光学实验的软件。

VB调用Matlab一直是一个难题,可以通过ActiveX自动化技术或Matlab的COM Builder技术实现。但是利用ActiveX时会在后台启动一个Matlab进程,不能脱离Matlab环境,而且实时性差;通过COM Builder技术虽然可以脱离Matlab环境,但是一些工具箱函数还是无法编译,有一定的局限性,这两种方法都难以满足软件开发的要求[3,4,5]。这里利用DLL动态链接库方法实现了在VB中调用Matlab。

利用动态链接库方法也就是将Matlab的M-文件转变成为VB可以调用的DLL文件,从而实现VB对Matlab的调用[4,5]。具体过程如下:

(1)利用Matlab编写函数,并保存为M-文件。利用Matcom4.5软件将其编译为DLL文件,同时还会自动生成在VB中声明DLL的模块文件.bas文件和.cls文件。

(2)把DLL文件拷贝到VB工程目录或者是系统目录system32下,并用上面生成的.bas文件声明。

(3)把生成的.cls文件添加到VB的公共模块中。

(4)在VB中引入MaxtrixVB库作为与DLL的接口代理,Matlab编写的函数就可以在VB中直接应用。

利用DLL技术能够实现VB对Matlab的调用,这种方法可以方便地在自己开发的应用软件中嵌入Matlab软件的功能,实现自己的运算及图像显示。

2 系统设计

2.1 主体界面及设计思路

在实验教学过程中,学生的学习过程应该是主动、自主学习的过程。本软件的设计思想在于创立友好的人机交互界面,方便的仿真系统,开发面向学生、直观、易于操作的辅助实验教学软件。在设计上,用一个主目录窗体界面将主要的光学实验整合在一起,这部分设计以文本属性、窗体的链接为主,软件主窗体如图1所示。

2.2 详细设计说明

在各光学实验的具体模拟中,每个光学实验的模拟都含预习评价、实验内容、数据处理、思考练习等部分,同时还有实验扩展、技术应用等版块,方便老师和学生查阅、练习,提高学生的创新能力。

以仿真模拟光栅衍射实验为例介绍开发光学实验仿真模拟系统的过程。

3 光栅衍射实验的模拟

3.1 光栅衍射实验的数学模型

设λ为入射光波长;a为光栅上每一透光狭缝的宽度;d为光栅常数;φ为衍射角。一般光栅与光屏的距离D远大于衍射条纹在光屏上偏离光屏中心的距离ys,因此有:

光栅衍射可以看作是N个相干光形成的缝间干涉和单缝衍射共同作用的结果。对于光屏上任一点P的光强度,等于N个相干光在该点产生的干涉光强度与宽度为a的单缝夫朗和费衍射在该点产生的光强度的乘积,其强度可表示为[6]:

其中:I0为屏中心的最大光强;[(sinα)/α]2为单缝衍射因子;(sin Nβ/sinβ)2为多光束干涉因子;α=πa/λsinφ;β=πd/λsinφ。

3.2 编写Matlab程序

根据光栅衍射实验的数学模型,在Matlab环境下编写光栅衍射实验的raster.m函数文件。raster.m程序清单如下:

3.3 将Matlab程序转化为DLL文件

用Matcom4.5将M-文件转化成DLL的操作步骤如下:

(1)启动运行Matcom,点击菜单File/Compile to dll,选择要写好的raster.m文件。

(2)点击OK。这时在对应的Debug目录下,有许多编译生成的文件。在VB开发环境中需要用的文件有3个:raster.dll(DLL文件)、raster.bas(声明DLL的模块文件)、raster.cls(VB调用DLL的接口)。

3.4 在VB中调用DLL文件

(1)界面设计。在VB中新建一个工程,新建窗体。在窗体中添加控件并设置各控件的属性(如图2所示)。然后,通过编写简单程序建立文本框和相应滚动条之间的联系。

(2)导入MaxtrixVB库和DLL文件。为了能适应Matlab强大的矩阵运算功能,还必须将MaxtrixVB库加入到工程中,过程为:点击菜单Project,选择Reference,在Reference对话框中复选Mmatrix,点击OK。

将raster.bas和raster.cls加入到工程中,将生成的raster.dll文件拷贝到System32目录下。这样就可以用raster.bas声明raster.dll,并通过mymfile.cls建立VB调用raster.dll的接口。

(3)主要程序代码设计

(4)调试通过,设置参数后可以看到如图2所示的效果。在VB中将程序生成可执行文件,再把相关的文件一起打包,制作成安装包,就可以脱离VB和Matlab而单独安装使用。

4 结语

用动态链接库DLL方法成功实现了VB和Matlab的接口编程,并生成可执行程序,可以脱离VB和Matlab的环境单独运行。这样也隐藏了程序源代码,提高了程序的保密性。开发出基本光学实验的模拟系统,实现了在实验室做不出的实验效果演示。该集成的光学实验仿真系统可实现图像的动态显示,随入射光波长的实时改变动态显示光强分布的图像,较为逼真。实验窗口中的图像可以由实验者调试为单独显示模式,故而方便了实验者对光学图像的存储。本套光学实验仿真系统已经在中南大学物理实验室初步投入使用,弥补了光学实验在此方面的空缺,提高了教学质量。而且还将提供给其他高校物理实验室,辅助光学实验教学。

摘要:计算机仿真辅助教学比起传统的教学模式有很大的优势。利用DLL动态链接库技术解决VB和Matlab编程的接口问题,将VB的可视化界面功能与Matlab强大的绘图功能结合起来,实现二者混合编程,开发出了光学实验的仿真模拟系统。该系统具有人机交互好,生动形象,易于操作等特点,并且可以脱离VB和Matlab单独运行。通过在物理实验室的试用表明,该系统真正实现了辅助实验教学。

关键词:光学实验模拟,Matlab,VB,DLL

参考文献

[1]李建平,胡玮,董超,等.最大气泡法测液体表面张力实验多媒体CAI课件的开发与应用[J].实验技术与管理,2007,24(8):86-89.

[2]周忆,梁齐.用Matlab语言模拟光衍射实验[J].大学物理实验,2001,14(4):47-48.

[3]黄锡泉,姚竹亭.VB和Matlab无缝接口编程[J].微计算机应用,2005,26(2):238-240.

[4]谭炎,张凌燕.Matlab与VB混合编程技术研究[J].微计算机信息,2006,22(5):247-249.

[5]王正祥,刘载文,杨斌,等.Matlab 6.5与VB混合编程中的接口技术研究[J].微计算机信息,2006,22(10):187-189.

[6]钟锡华,赵凯华.光学(上、下册)[M].北京:北京大学出版社,1984.

[7]韩振海,贺德春.Matlab在波动光学教学中的应用[J].河西学院学报,2005,21(2):126-128.

[8]冯旭.在VB开发环境中调用由Matlab函数转化的DLL[J].西北民族大学学报:自然科学版,2004,25(2):65-67.

[9]郭平.浅谈VB与Matlab混合编程[J].广西轻工业,2006,(5):78-79.

[10]符运良.Matlab在光学教学中的应用[J].华南热带农业大学学报,2004,10(3):55-57.

上一篇:传统文化教育的回归下一篇:小麦质量