MATLAB程序实现

2024-08-14

MATLAB程序实现(共8篇)

MATLAB程序实现 篇1

摘要:图像认证水印的应用要解决的基本问题有两个:一是鉴别数字图像的真伪, 即图像的真实性和完整性问题;二是篡改定位, 即被篡改的区域的定位, 并推断图像被篡改的程度和感兴趣的区域。提出一种新的认证水印算法, 利用Matlab工具软件, 在Matlab环境下仿真实现水印的生成、嵌入、提取和检测, 分析算法的性能, 具有较好的现实意义。

关键词:认证水印,MATLAB,篡改检测

1 图像认证水印算法设计

基于分块的认证算法是一种常见的认证技术, 本文设计的算法是:图像2×2不重叠分块, 提取图像分块的灰度均值并量化为8比特的精确值, 经混沌logistic映射加密和确定嵌入位平面后, 嵌入到原始图像所有像素的2个最低有效位中;在图像需要认证时, 提取图像中水印信息和重新计算图像分块灰度均值, 经加密和确定嵌入位平面后生成参考水印, 比较提取的水印信息与参考水印, 若相同则通过认证, 反之判定为篡改。在认证检测过程中, 不需要原始图像和任何有关水印的附加信息, 保证了水印的安全性和保密性, 实现对图像内容完整性认证和篡改的精确定位。

为便于算法描述, 我们考虑一幅静止灰度图像I, 其大小为M×N像素, 其中M和N都为2的整数倍。水印的生成和嵌入框图如图1所示。

对于认证水印系统而言, 因为一般用户得到的是己经过篡改的图像, 原始图像用户是没有办法知道的, 一般情况下如果已经知道原始图像的话就没有必要再进行完整性检验了, 所以水印的检测必须实现盲检测。水印检测及定位过程如下:

2 认证水印的MATLAB程序实现

2.1 MATLAB特点

MATLAB是一种面向科学与工程计算的高级语言, 具有的优点有: (1) 编程效率高; (2) 扩充能力强, 交互性好; (3) 方便的绘图功能; (4) 功能强大的工具箱。提供了图像处理工具箱、小波分析工具箱; (5) 移植性和开放性好; (6) MATLAB与C语言具有良好的接口。

2.2 认证水印的MATLAB程序实现

2.2.1 水印的生成和嵌入

2.2.2 水印的检测和定位

2.2.3 水印的不可见性

使用峰值信噪比 (PSNR, Peak Signal to Noise Ratio) 来评价嵌入水印后的图像和原始图像之间的差别, 代码如下:

下面表1是不同图像嵌入水印前后PSNR的实验结果。

从表1中可以看出所有图像的峰值信噪比都达到了44d B以上, 完全满足了认证水印对不可见性的要求。

2.3 实验结果

对图像大小为512×512像素的“lena.tif”8位灰度图, 图3给出了实验结果, 其中 (a) 为原始图像; (b) 是嵌入水印后的图像, 与原图像相比在视觉效果上看不出差别也看不出降质。 (c) 是在 (b) 中进行篡改, 加上一幅墨镜和“lena”字样, 即篡改含水印的图像; (d) 是其篡改定位结果 (白色区域表示篡改位置) 。

另外, 我们对算法进行改进, 应用于对24位真彩色图像的认证。下面对图像大小为320×256像素“football.bmp”的进行进行篡改检测实验, 如图4所示。在图4中原始图像 (a) 和嵌入水印信息后的图像 (b) 在人类主观观察效果上看不出它们的差别;图像 (c) 是把 (b) 中的字母‘G’改为‘C’;经检测认证得出图像 (d) 是其篡改定位结果。

从以上图3和图4中可以看出由于采用了8比特位来精确地表示图像块的灰度均值, 因此, 在图像块中哪怕有一个比特的细微改变都能够检测出来, 即能准确定位到图像改变的块, 完全满足了认证水印敏感性要求。

参考文献

[1]张宪海, 杨永田.基于脆弱水印的图像认证算法研究[J].电子学报, 2007 (1) .

[2]ZHU B B, SWANSON M D, TEWFIK A H.When seeing isn't believing[J].IEEE Signal Process Mag, 2004 (10) .

[3]OUDA A H, El-SAKKA M R.Localization and security enhanceme-nt of block-based image authentication[C].Proceedings of IEEE International Conference on Image Processing.2005.

[4]董长虹, 赖至国, 余啸海.Matlab图像处理与应用[M].北京:国防工业出版社, 2004.

MATLAB程序实现 篇2

if sgm(i)>0

h=1;

end end

while h>0

[msg,mk]=max(sgm);

for i=1:m

sta(i)=b(i)/A(i,mk);

end

[mst,mr]=min(sta);

zy=A(mr,mk);

for i=1:m

if i==mr

for j=1:n

A(i,j)=A(i,j)/zy;

end

b(i)=b(i)/zy;

end

end

for i=1:m

if i~=mr

for j=1:n

A(i,j)=A(i,j)-A(i,mk)*A(mr,j);

end

b(i)=b(i)-A(i,mk)*b(mr);

end

end

B1=A(:,1:m);

cb(mr)=c(mk);

xx(mr)=mk;

sgm=c-cb*B1*A;

for i=m+1:n

if sgm(i)>0

h=1;

end

end

MATLAB程序实现 篇3

关键词:JC法,MATLAB,GUI

1 JC法基本原理

JC法的解题思路是将非正态随机变量作当量正态化处理[1,2],将其转化为等效的正态随机变量,用结构在设计验算点处的切平面代替极限状态曲面,然后利用改进的一次二阶矩法求解可靠度指标。

设结构功能函数可表示为

选择失效界面上的点P*(x1*,x2*,…,xn*)为线性化点,由于假设P*点在失效界面上,它满足极限状态方程,即f*(x1*,x2*,…,xn*)=0,这时

其中

根据可靠度系数β的定义,有

由式(5)可得

满足这个方程的设计验算点为

下面是两条当量正态化的条件:

1)在设计验算点xi*处,当量正态随机变量XiN(其平均值为μXiN,标准差为σXiN)的分布函数值GXiN(xi)与非正态随机变量Xi(其平均值为μXi,标准差为σXi)的分布函数FXi(xi*)相等;

2)在设计验算点处,当量正态随机变量XiN的概率密度函数gXiN(xi)与非正态随机变量Xi的概率密度函数fXi(xi*)相等。如图1所示。

由条件1)和2)可以得到当量正态分布的平均值μXi*和σXiN标准差。

2用MATLAB实现JC法在结构可靠度中的计算

2.1 MATLAB的简介

MATLAB是由美国MathWorks公司于1984年推出的一套高性能的数学计算和可视化软件,它是一种功能极其强大的科学和工程计算数学软件系统,汇集了大量数学、统计、科学和工程所需的函数。MAT-LAB的一个重要特色就是有一套程序扩展系统和一组称之为工具箱(toolboxes)的特殊应用子程序,多达40多个面向不同领域而扩展的工具箱支持,每一个工具箱都是为某一类学科专业和应用而定制的,工具箱是MATLAB函数的子程序库。与Fortran、C等编程语言相比,MATLAB具有编程语法简单、用户界面友善、矩阵运算功能强等特点,易为广大工程技术人员所掌握,可以大大提高编程效率。

2.2编程求解

如果将可靠度计算方法比作一个结构,搭建这个结构需要大量基本构件,这里指一些常规计算方法,那么,只要选用MATLAB的命令和函数作为结构的标准构件,就能凭借其高效精确的算法实现复杂结构,而且结构的可靠性也是很高的。图2是JC法程序框图[3]。

按照图2所示的计算流程编写成MATLAB模块[4,5]:

MATLAB7.0引进了fig文件来保存GUI的布局,用M文件进行GUI编程,使GUI设计变得简单、快捷[6]。

在MATLAB7.0命令窗口下,输入guide命令或者利用文件菜单中的new选项下的GUI,即可以进入GUI设计窗口。从窗口的左侧工具栏中选取需要的控件,绘制在右侧雏形窗口;双击各控件图标,即打开该控件属性对话框,对其进行属性设置。最好为每个控件设置一个标签,即设置Tag属性,且标签值是唯一的,以便在自动生成的m文件中编程时能容易快速地找到其句柄。

保存图形界面时,系统将自动生成一个同名的m文件,打开此程序文件,对图形界面各控件的回调函数Callback()增加所需的程序代码,以完成各种操作。

3算例

本程序开发主要考虑结构抗力、工作荷载效应和风荷载效应。程序计算分为单值可靠指标的计算和批量可靠指标的计算。

取文献[7]中一组数据进行验算,抗力R服从对数正态分布,永久荷载效应S服从正态分布,L服从极值Ⅰ型分布,其均值和变异系数分别R=319.52,VR=0.17;S=53.0,Vs=0.07;L=70.0,VL=0.29。输入程序后计算结果β=3.69546。程序计算界面如图3所示。

对于批量数据的计算,MATLAB可以通过xlsread函数从EXCEL表中读取所需的应力值。通过实际的资料统计可以得到结构抗力、工作载荷以及风载荷的变异系数,可以在程序中直接定义好,也可以设计可视化的界面手动输入。点击“导入EXCEL数据”按钮将有关数据代入可靠性计算程序进行计算。

Android通过设置类的AdapterView.OnItemClickListener成员到一个监听者并捕捉用户的操作事件,来处理用户的操作具体代码如下:

//创建一个消息句柄

//映射事件操作,并设置监听器

4结论

Android手机应用程序开发需要涉及它的整个体系结构,是一项复杂的工程。本文介绍了Android框架的层次结构,并在此基础上给出了Android用户界面设计的原理与设计过程。Android平台具有极大的开放性和兼容性,并且本身大量使用开源代码库,为开发人员提供了一个非常便捷的开发环境。关于Android平台和J2ME平台程序移植以及运行效率方面将是一个进一步研究的方向。

参考文献

[1]赵国藩.工程结构可靠性原理与应用[M].大连:大连理工大学出版社,1996.

[2]贡金鑫.工程结构可靠度计算方法[M].大连:大连理工大学出版社,2003.

[3]喻全余.用改进的一次二阶矩法求应力—强度系统的可靠度系数[J].机械设计,1997(12):36-38.

[4]李志华,张光海,康海贵.基于Matlab优化工具箱的工程结构可靠度计算[J].四川建筑科学研究,2005,31(3):1-4.

[5]张明.结构可靠度分析—方法与程序[M].北京:科学出版社,2009.

[6]亨塞尔曼.利特菲尔德.精通Matlab7[M].北京:清华大学出版社,2006.

MATLAB程序实现 篇4

关键词:Matlab,Vrml,Java,虚拟现实工具箱

1 引言

Java是Sun公司开发的高性能的面向对象语言,具有稳定、可靠、语言简洁、与平台无关等特点,广泛应用于Internet/Intranet网络应用和分布式系统开发。本文介绍了几种利用Java实现Matlab与Vrml之间交互的方式,有些在实际中已经得到一定的应用。

MATLAB(MATrix LABoratory,矩阵实验室)是由美国Mathworks公司推出的科学计算软件。它集数值分析、矩阵运算、信号处理和图形显示于一体.功能强大,界面友好,易学易用,在数值计算、数字信号处理、自动控制、时序分析与建模、神经网络、动态仿真系统、图象处理等科学与工程领域中得到了广泛的应用。

VRML是ISO组织于l998年1月通过的基于Internet的网上虚拟场景描述标准。由于它具有分布式、交互性、平台无关性、真三维、多媒体集成等众多优点,因此一经推出,立即受到人们的高度重视。VRML已经在网络制造、虚拟漫游以及计算机动画中扮演了愈来愈重要的角色。因为Vrml可以在低带宽网络环境中实时进行三维信息的远程传输和远程控制指令的接收,能与其他数据系统顺利连接,提供了良好的人机界面和完善的对象结构模型。由于其直观性和实时交互功能,在远程监控中得到应用。

2 MATLAB与Java联合应用的方法

2.1 MATLAB对Java的调用

利用MATLAB提供的Java接口.可以在MATLAB中调用Java,从而实现二者的联合应用。MATLAB Java接口是在MATLA B环境中运行和使用Java程序所提供的函数库,用来完成以下功能:(1)访问Java API的类组件。(2)访问第三方提供的类。(3)在MATLAB中方便地构造Java类对象。(4)使用MALAB或Java语法调用Java类对象的方法。(5)在MATLAB变量和Java类对象之间传递数据。Java接口的使用涉及以下几个方面:Java类的导入、Java类对象的创建和使用、Java类方法的调用、J a v a类对象与M A T L A B的交互等。

Matlab可以在众多的Java类中得到要使用的类,也可以创建自己的Java类。Matlab命令通过完整的类名识别任何一个Java类.也可以使用import导人命令进行简化。在MATLAB中,可以通过构造函数与JavaObject函数两种方法创建类对象.使用save命令可将Java类对象存储到MAT文件中,再使用load命令即可将M文件中的类对象导入到M A T L A B中来使用,类对象中的公有数据可直接访问,而私有数据可使用get与set方法进行访问。

在MATLAB中要调用类对象中的方法,可以使用Java的语法:object.method(argl,…,argn),也可以用MATLAB的语法method(object,argl,…,argn)来调用非Java类对象的静态方法。但如调用方法名超过31个字节时,必须使用JavaMethod方法。Java类对象可以传递给方法,也可以从方法中返回Java类对象,还可以将Java类对象在矩阵之间传递,但必须是Java对象矩阵或者MATLAB单元矩阵。Java对象矩阵是调用Java类的构造函数或方法所返回的Java对象的矩阵,在MATLAB中可以使用JavaArray函数来创建Java对象矩阵。MATLAB屏蔽了Java对象矩阵与MATLAB矩阵在结构上的差异,使用户可以象操作MATLAB矩阵一样操作Java对象矩阵。

在MATLAB中调用Java代码时,任何一个需要传递给Java的MATLAB数据必须转换为Java语言的数据类型,MATLAB自动执行这一转换过程。如果传递的变量属于某一个Java类,则必须传递这个类的对象。如果传递的变量是Java对象矩阵,则只能是Java矩阵和MATLAB单元矩阵。在许多情况下,从Java方法返回的值并不兼容于MATLAB数据类型,此时MATLAB将Java方法返回的值转换成匹配的MATLAB内部数据.并且可使用struct函数把Java对象转换成MATLAB结构.使用cell函数将一个Java矩阵或Java对象转换成MATLAB中的单元矩阵。

2.2 Java对Matlab的调用

利用Java的Runtime类,并通过MATLA B的标准输人输出流,可以实现Java对MATLAB的调用,从而达到二者的联合应用[4]。实现原理如图1所示。

为了实现上述功能,可设计一个Java类,能够用来启动MATLAB程序,发送命令给这个程序。并接受处理结果。这个类必须导人java.1ang.Runtime和java.io.*,主要包含BuferedReader型(缓冲读取),Buffered—Writer型(缓冲写人),字符数组(结果输出)等三类私有变量。需要设计三个方法:

(1)open()方法,包含以下主要语句:

(2)send()方法

主要调用BuferedWriter型变量的write()和f l u s h()方法,向缓冲写入数据,主要是待执行的M A T L A B命令。

(3)receive()方法

主要调用BuffercdReader型变量的read()方法,向缓冲读取数据,主要是MATLAB程序的执行结果,并可返回给这个类的字符数组变量。值得注意的是,在所有这三个方法中必须有synchronized(this)语句,用来同步控制。避免MATLAB输人输出流可能的冲突。最后在主函数main()中,调用open(“matlab”)方法,向cxcc0方法传递启动命令字符串给参数startmat,启动MATLAB程序。调用scnd(matstr)方法,传递要执行的MATLAB命令字符串matstr给write(),写人到缓冲,交由MATLAB执行。调用reccive()方法,从缓冲中读取MATLAB执行结果,从而实现了Java对MATLAB的调用。

3 Java与Vrml的联合应用

为了实现V R M L世界与外部环境的交互,V R M L提供了一组接口EAI(External Authoring Interface)[2]。该接口由一组关于浏览器操作的函数组成,通过这些函数的调用,外部程序就能影响VRML世界中的物体。在Java语言中,这些函数被封装在3个包中:v r m 1.e a i.*,vrml_eai.event.*,vrml_eai.field.*(或vrml_externa1.*,vrm1.externa1.field.*,vrm1.externa1.exception.*)。

首先,调用封装在vrm1.eai.BrowserFactory类中的getBrowser()获得一个Browser类实例(注:该类提供了3个获得Browser实例的方法:getBrowser(Applet),get Browser(Applet,String,int),get Browser(Inet Address,int);前两个函数为本地调用,后一个支持远程调用,需要给出IP地址和端口号),然后用所得的Browser实例,调用Browser.getNode(String)函数(该函数能访问到用InLine语句内嵌在VRML场景中的节点),以获得所需的节点,最后调用封装在v r m 1.e a i.N o d e类中的getEventInO,getEventOut0函数,即可访问VRML场景中各节点的域,进而按要求改变节点的状态,从而实现其交互性。

利用vrml_eai包提供的Browser和Node类,可以完全不用Script节点和Script类以及路由等方式而直接由EAI外部程序操控VRML世界中的各种节点,极大地丰富了VRML的功能。但是该方法也有其局限性,它只能通过Java小程序来控制VRML世界,因为get(BrowserfApplet)函数中的参数只能是Applet应用程序的实例。

最后将经过Java编译器编译后生成的classname.class文件和VR文件放在同一目录下,然后编写HTML文件整合二者即可。

4 Matlab与Vrml直接交互的方法

利用Matlab提供的虚拟现实工具箱,可以实现和Vrml程序的直接交互[1]。Matlab中的虚拟现实工具箱可在Matlab/Simulink环境中设计、微调并控制3D世界,带来强大的虚拟视觉化、模拟以及实证动力.Virtual Real—ity Toolbox借由VRML所构成的浏览器与Matlab和Simulink紧密连结,同时将模型系统以三度空间的虚拟方式呈现,为能在一个三维虚拟现实环境中进行可视化操作和与动态系统进行交互提供了一种有效的解决方案.使用标准的VRML技术,可以通过Matlab和S i m u l i n k环境生成三维场景,特别的可以通过Simulink这一接口在一个虚拟现实的三维模型中观察动态系统的模拟.虚拟现实工具箱的大多数特征可以使用Simulink模块来实现,一旦在Simulink对话框中包含了这些模块,就可以选择与Simulink信号连接的虚拟世界.所有V R M L节点的属性分别列在等级树样式的观察窗口中,可以选择控制的自由度.当关闭接口对话框后,虚拟现实工具箱模块自动更新在虚拟世界中与选择节点有关的输入和输出。当连接这些输入到一定的Simulink信号上时,就可以在一个支持VRML的浏览器中观察到可视化的模拟.另外,虚拟现实工具箱还提供了一个灵活的与虚拟现实世界相连的Matlab接口[3].

5 结束语

以上简要介绍了Matlab与Vrml实现交互的几种方法,其中,利用虚拟现实工具箱进行交互的办法简单易行,并且在教学与实验室环境下得到了一定的应用,但是这种交互只能是Matlab到Vrml的单向信息传递。为了解决此类问题,可以利用Java语言丰富的网络交互性,文中提到的办法,具有很好的应用前景。

参考文献

[1]张家祥,方凌江,毛全胜.基于Matlab6.x的系统分析与设计一虚拟现实[M].西安:西安电子科技大学出版社,2002

[2]张辉,吴侃.VRML与Java技术在虚拟现实中的应用[J].测绘信息与工程,2004(4):20-23

[3]晁冰,吴祖国.虚拟现实技术在Matlab 6.x中的实现[J].计算机与现代化,2004(7):124-126.

MATLAB程序实现 篇5

小波分析作为一种信号分析工具,被誉为“数学显微镜”。小波函数具有良好的时频特性,因而小波分析方法为信号的时频分析提供了有力的手段,被认为是傅里叶分析方法的突破性发展。它与短时傅里叶变换的最大不同之处在于其分析精度可变,是一种用加时窗进行分析的方法,在时频相平面的高频段具有高的时间分辨率和低的频率分辨率,而在低频段具有低的时间分辨率和高的频率分辨率,克服了傅里叶变换中时频分辨率恒定的弱点。它能在具有足够时间分辨率和高频率分辨率的前提下,对信号中的短时高频成分进行分析,又能在很好的频率分辨率下,对信号中的低频进行估计。因此,小波分析方法在故障诊断等许多领域得到日益广泛的应用。但其算法复杂,直接编程实现较为困难。

MATLAB是一套高效率的数值计算和分析软件,它具有计算功能强大、语言自然等特点,并提供了非常好的小波分析实现工具,但要求使用者具有较高的计算机使用水平,并熟悉ToolBox环境。Visual Basic是Windows平台上的可视化编程语言之一,VB突出的优势是避开了C++编程过程中过于繁琐、抽象的方式,具有易学易用、编程简单、界面友好等特点,但VB在进行数据分析和图形处理时,编程繁琐,运算速度较慢,使得其在一些领域难以得到充分利用。

本文将上述两个软件的功能结合在一起,利用VB和MATLAB各自的优点和MATLAB提供的小波工具箱,开发一种基于VB与MATLAB的小波分析软件。软件通过在VB应用程序中直接读取数据,调用MATLAB的小波计算程序,实现对信号数据的处理。

1 VB与MATLAB的集成

ActiveX部件是Microsoft公司提供的一种用于模块集成的协议。由于MATLAB支持ActiveX技术,因此,既可以在其他程序下运行MATLAB的ActiveX部件,也可以在MATLAB下运行其他的ActiveX部件。也就是说,MATLAB实现了ActiveX自动化服务支持,在VB下通过ActiveX自动化接口可将MATLAB作为VB语言的一个ActiveX部件调用。

VB使用ActiveX对象一般采用以下几个步骤:

第一步,创建对象的引用。

第二步,用对象的方法、属性与事件编写代码。

第三步,对象使用结束后将其释放。

在VB应用程序中创建了MATLAB的ActiveX对象后,就可以使用这个对象所包含的各种方法来实现对MATLAB的调用。MATLAB支持ActiveX服务主要有Execute、GetFullMatrix和PutFullMatrix等方法:

(1) BSTR Execute ([in] BSTR Command):

接收字符串命令并在MATLAB中执行,将结果以字符串形式返回。其中,BSTR是宽字符串类型,与VB存储字符串所采用数据格式相同。

(2)void GetFullMatrix ([in]BSTR Name,[in]BSTR Workspace,[in,out]SAFEARRAY(Double)*pr,[in,out]SAFEARRAY (Double)*pi):

从指定的工作空间检索一个完整的一维或二维的数组。其中,Name是提取数值的名称,Workspace表示包含数值的工作空间,一般指定为“base”,即MATLAB默认工作空间。pr和pi分别包含所提取数组的实部和虚部。

(3)void PutFullMatrix ([in]BSTR Name,[in]BSTR Workspace,[in,out]SAFEARRAY(Double)*pr,[in, out]SAFEARRAY (Double)*pi):

向指定的MATLAB工作空间中设置一维或二维数组,其中,Name是设置输入数组的名称,其他同前。

MinimizeCommandwindow(使MATLAB窗口最小化)和MaximizeCommandWindow(使MATLAB窗口最大化),利用这些方法在VB应用程序内可实现任何MATLAB的功能。

MATLAB命令执行后的图形结果可以以元文件(metafile)的格式存放在Windows剪贴板中,VB通过剪贴板再将MATLAB图形显示在软件系统中。

2 软件的设计

本文采用MATLAB ActiveX自动化服务器技术,以VB为开发界面,在界面中输入参数传递给MATLAB计算,计算完数据后将该参数下的结果在VB开发的界面上显示出来。基本过程为:

(1)首先将VB和MATLAB实现连接。代码如下:

Dim Matlab As Object

Set Matlab=CreateObject(″Matlab.application″)

(2)将界面中输入的数据传递给MATLAB,如图1所示。

(3)MATLAB计算完后将结果在VB设计的界面中显示出来,如图2所示。

3 结束语

采用VB与MATLAB混合编程的设计思想与方法,可以实现快速构建应用程序,既充分发挥了两种编程语言的各自优势,又突破了以往依靠单一语言实现需求的局限性,使得程序的功能超越了单一编程语言所能达到的水平,而开发难度和开发时间却大大降低。同时,采用本方法进行编程,可以使程序功能随着准确、高级的信号处理工具箱的扩充而不断扩展与加强。应用本文思想与方法所开发的小波分析程序应用于某齿轮箱故障诊断,取得了较为满意的效果。

摘要:小波分析方法已被应用于故障诊断等许多领域,但其算法较为复杂,编程实现有一定难度。MATLAB在信号处理方面有着显著的优势,利用其提供的函数,科研人员能够快速而准确地分析和处理数据。结合VB编程简单、界面友好的特点及MATLAB强大的计算、图形表达功能,研究VB与MATLAB混合编程的方法,开发了效率高、使用方便的小波分析程序。利用此方法开发的分析程序应用于工程实践,结果表明此方法简便可行、分析结果正确。

关键词:VB,MATLAB,小波分析,混合编程

参考文献

[1]王道义.Visual Basic 6使用详解[M].北京:机械工业出版社,1997.

[2]胡昌华,等.基于MATLAB6.X的系统分析与设计——小波分析[M].2版.西安:西安电子科技大学出版社,2004.

[3]谭轶平,王振清.VB和MATLAB混编实现振动信号的频谱分析[J].物理测试,2004(2):30-32.

[4]梅志红,邓文华.基于MATLAB与VB集成技术的通信系统仿真软件的开发[J].计算机仿真,2004(6):195-199.

MATLAB程序实现 篇6

MATLAB也称为矩阵实验室,是一种建立在向量、数组、和矩阵基础上,面向科学与工程计算的高级语言,它集科学计算、自动控制、信号处理、神经网络、图像处理于一体,具有极高的编程效率。

本世纪70年代中期,Cleve Moler编写了方便使用LINPACK和EISPACK的接口程序,并把这个接口程序取名为MATLAB,1983年春,Johr.Little和Moler、Steve、Banqert一起合作开发第二代专业版的MATLAB,MATLAB的核心开始用C语言编写,同时增加了绘图和图形功能。1984年,MATLAB公司成立并出了MATLAB最初版本。之后,MATLAB不断有新版本推出,还实现了32位运算,数值计算的速度也更快,图形表现更丰富有效,编程更简洁直观,用户界面更友好,内容越来越丰富,功能越来越强大。

现在MATLAB有30多个工具箱(TOOLBOX)功能极其强大,如神经网络、优化、小波分析、信号、图像处理、控制系统、偏微分方程、模糊逻辑、统计分析、样条、系统识别等,为科学研究和工程计算提供了一个方便有效的工具。

2 B样条与B样条小波

2.1 B样条

令m为任意正整数,Nm代表在整数集上有节点的m阶B样条。更精确地说,Nm被递归定义为

其中N1(x)=χ[0,1),即区间[0,1)上的特征函数[1,2]。

B样条的定义有很多种,本文只给出其中的一种[2]。上面介绍的是等距B样条,B样条具有非负性、紧凑性、分段光滑性、对称性、整平移单位分解性质等等。B样条有限元法与B样条有限体积元法现已应用的非常广泛。

2.2 B样条小波

利用多尺度分析理论构造出的B样条小波函数同时具备紧支集,对称性和反对称性,很高的正则性,高阶消失矩及半正交性等优良性质。因此,B样条小波的应用范围也非常广泛。

m阶B样条小波

具有支撑[0,2m-1],并且Ψm(x)是基本小波。注意Ψ1(x)是著名的Haar小波,并且Haar小波是一种正交小波。[1]在给出(2)式证明的过程中,还推导出了两尺度关系:

其中

这两个式子可用于求解小波函数的表达式,较(2)式的计算过程更简单。

3 MATLAB程序实现

这部分我们将介绍基于MATLAB的B样条小波图像的程序实现,通过以下程序我们可以绘制出任意阶B样条与B样条小波的图像,并且操作简单。

4 结论

本文介绍的B样条小波还具有以下优点:第一,构造方法简单,易于操作;第二,构造的小波均具有显示表达式,具有很好的光滑性,所以便于对问题进行深入的分析和估计,并且易于编程上机计算,第三,本文中的样条小波很容易推广到高维小波,而其他小波在被推广到高维小波时则显得力不从心。

虽然通过(2)式或(3)、(4)式能够计算出m阶B样条小波的表达式,但是当m比较大时,样条小波函数的表达式比较复杂,通过表达式画图也相对复杂。本文中第三部分恰恰解决了这个问题,通过以上程序的调试,我们可以非常容易地绘制出任意阶的B样条及B样条小波函数的图形,并且可以从几何直观上研究B样条小波的各种优良性质。

摘要:MATLAB是一种建立在向量、数组、矩阵基础上,面向科学和工程计算的高级语言,为科学研究和工程计算提供了一个方便有效的工具。该文简要介绍了B样条和B样条小波的构成,并利用MATLAB语言编写了绘制任意阶B样条和B样条小波图形的程序。

关键词:MATLAB,B样条,B样条小波

参考文献

[1]C.K.Chui and J.Z.Wang.On Compactly Support Spline Wavelets and A Duality Priciple[J].Trans.Amer.Math.Soc,1992,330:903-916.

[2]孙家昶.样条函数与计算几何[M].北京:科学出版社,1982.

[3]Hanselman,B.Littlefield.精通Matlab6[M].北京:科学出版社,2002.

MATLAB程序实现 篇7

1 GPS网平差流程

在使用数据处理软件进行GPS网平差时, 需要按下几个步骤进行:

(1) 基线向量提取。首先提取基线向量是进行网平差的必要条件, 并最终构建GPS基线向量网。

(2) 三维无约束平差。在完成构网后, 需要对GPS网进行三维无约束平差运算, 通过该运算主要达到以下两个目的:

(1) 判别是否存在粗差基线;

(2) 调整各个基线向量观测值的权[4]。

(3) 约束平差/联合平差

约束平差的具体步骤如下:

(1) 制定需要进行平差计算的基准和坐标系统;

(2) 指定平差计算的起算数据;

(3) 根据要求检验约束条件的质量;

(4) 开始进行平差解算。

(4) 质量分析、控制

在对GPS网质量进行评定时可采用标准如下:

(1) 基线向量改正数。分析基线向量改正数, 检查是否存在粗差。具体依据为:若Δ, 便可认为基线向量中不含有粗差;反之, 则含有粗差。

(2) 相邻点的中误差与相对中误差。若网中某基线存在粗差, 可删除该基线, 或者重测该基线;若个别起算数据的质量存在问题, 则应该放弃有质量问题的起算数据[2,3]。

2 原始数据文件

程序中所需要的数据文件及截图如图1:

原始数据文件格式说明:

(1) 数据的第一行为总的点数、向量组的总数、向量的总数。

(2) 接下来为已知点的坐标和未知点的近似坐标, 每个点的数据单独占一行, 一行内包括:点名, X、Y、Z坐标值, 已知未知标记。当该点为已知点时标志取为1, 为未知点时取为0。坐标值以m为单位。

(3) 坐标之后, 按向量组顺序排列各个向量组基线向量及其方差协方差矩阵。每一个向量组的数据首先是向量组的编号与向量组内的向量数, 然后是向量数据 (包括向量起始点名、至点名、x分量、y分量、z分量) , 最后是方差协方差矩阵元素。向量值以m为单位。方差协方差矩阵只包括下三角矩阵元素, 为便于阅读, 矩阵每一行的第一个元素之前加了行号, 当一行的数据超过4个时每4个数据增加一个换行。

3 程序设计与运行步骤

输入函数inputdata, 命令程序调用原始数据, 该函数有一个参数file, 是原始数据文件名的字符串地址。

在导入数据后, 点击“自由网平差”按钮, 开始计算网平差, 得出待定点的坐标, 则显示如图2:查看GPS网形图

自由网平差之后可查看当前所用各点组成的网形图, 点击查看网图按钮, 执行以下代码:

网形图如右图3

查看验后单位权中误差, 代码如下:

结果如图4显示, 残差和改正后坐标值的输出, 文件保存在work目录下, 打开如图5:

4 结论

MATLAB (即矩阵实验室) 是目前世界上应用最广泛的、最流行的工程计算与仿真软件, 其算法简单快捷, 功能强大[1]。在本文中主要对数据的后期处理过程中的各个模块用了该软件语言实现并同意调试, 最终得出计算结果。本例虽然是一个实例, 但格式具有通用性, 当网的规模和数据与本例不同时, 只要按本例的各项数据顺序及格式组成数据文件, 本程序仍可以正确读取。

摘要:本文简要的介绍了GPS网平差的流程与思路, 其中包括基线向量的读取阶段和网平差阶段。设计GUI的图形用户界面, 调整控件布局使用Matlab语言编写回调函数, 实现读取数据和网平差计算。

关键词:Matlab,GPS,网平差

参考文献

MATLAB程序实现 篇8

蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo于1992年在其博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为[1]。

1 蚁群算法

1.1 基本原理

蚂蚁在路径上前进时会根据前边走过的蚂蚁所留下的分泌物选择其要走的路径。其选择一条路径的概率与该路径上分泌物的强度成正比。因此,由大量蚂蚁组成的群体的集体行为实际上构成一种学习信息的正反馈现象:某一条路径走过的蚂蚁越多,后面的蚂蚁选择该路径的可能性就越大。蚂蚁的个体间通过这种信息的交流寻求通向食物的最短路径[2]。

蚂蚁的群体协作功能是通过一种遗留在其来往路径上的具有挥发性的化学物质——信息素(Pheromone)来进行通信协作的。通过研究发现,整个蚂蚁群体就是通过信息素相互通信、相互协作来共同完成对路径的寻找[3]。

1.2 数学模型

蚁群算法最早应用于解决旅行商问题,即TSP问题(Traveling Salesman Problem)。这是数学领域中著名问题之一,其可以简单描述为:给定n个城市,有一个旅行商从某一城市出发,访问各城市一次且仅有一次后再回到原出发城市,要求找出一条最短的巡回路径[4]。

设蚂蚁的数量为m只,随机的放在n个城市上, dij(j,j=1,2,…,n)表示城市i和城市j之间的距离,τij(t)表示t时刻城市i和城市j之间路径上信息素的浓度,初始时刻(即t=0时)为τij(0)=C(C为常数),某只蚂蚁选择下一个访问城市是根据各个城市间路径上的信息素浓度来决定的,设Pkij(t)为t时刻蚂蚁k(k=1,2,…,n)从城市i访问城市j的转移概率:

Ρijk(t)={[τij(t)]a[ηij(t)]βSallowk[τij(t)]a[ηij(t)]β,jallowk0,jallowk(1)

式(1)中,ηij(t)为启发函数,这里取为1/dij;α为信息素启发因子,其值越大说明信息素的浓度在转移中起的作用越大;β为期望启发因子,其值越大说明启发函数在转移中起的作用越大;allowk(k=1,2,…,m)表示蚂蚁k下一步允许访问的城市集合。

ρ为信息素的挥发系数,则可通过下式来进行信息素的更新:

{τij(t+1)=(1-ρ)τij(t)+ΔτijΔτij=k=1mΔτijk0Ρ1(2)

式(2)中,τij(t+1)表示t+1时刻城市i和城市j之间信息素的浓度,其值等于上一时刻(即t时刻)所残留的信息素浓度加上这一时刻(即t+1时刻)所有蚂蚁刚释放的信息素浓度,Δτijk表示第k只蚂蚁在城市i和城市j之间的路径上所释放的信息素的浓度,则Δτij表示m只蚂蚁在城市i和城市j之间所释放的信息素浓度之和。

关于Δτijk的计算,M.Dorigo等人给出了三种算法模型,这里选择第一种,即ant-cycle system模型:

Δτijk={QLk,ki访j0,(3)

式(3)中,Q为常数,表示蚂蚁循环一次所释放的信息素的总量;Lk为蚂蚁k经过的路径长度。

2 用Matlab实现蚁群算法

Matlab是一个功能强大的科学计算和工程计算软件,集成了计算、分析、仿真和可视化等诸多功能,特别是其强大的矩阵运算功能,对于编写蚁群算法有很大的优势[5]。

2.1 基本步骤

用蚁群算法解决TSP问题的步骤如图1所示。

2.1.1 数据的初始化

这个步骤主要完成以下数据的初始化:①通过已知的n个城市坐标,求得每两个城市间的距离并保存在距离矩阵中;②初始化信息素矩阵;③初始化算法参数;④初始化记录数据的变量及矩阵。

2.1.2 通过算法寻找最优路径

运行算法,通过迭代来计算最优路径,直到满足终止条件。

2.1.3 结果分析

通过运行程序,对输出的结果数据进行分析,通过修改不同的参数值,从而得到一组最优的参数组合。

2.2 具体实现

蚁群算法的具体实现如下:

Step 1 参数初始化。

Step 2 随机分布m只蚂蚁于n个城市。使用Matlab中的随机函数将m只蚂蚁随机的放在n个城市中。

Step 3 构建禁忌表。构建禁忌表tabu,将已经访问的城市放入tabu中。

Step 4 计算转移概率选择下一访问城市。根据式(1)来选择下一个要访问的城市。

Step 5 计算各蚂蚁路径距离。每一次迭代都要计算一次各蚂蚁的本次路径长度。

Step 6 计算最短路径距离和平均距离。计算当前迭代次数的最短路径距离和平均距离。

Step 7 更新信息素。根据式(2)更新信息素。

Step 8 迭代次数加1。

Step 9 判断迭代次数是否小于等于最大迭代次数,若迭代次数小于等于最大迭代次数,则跳转到Step 2,否则输出结果。

整个步骤的算法框图如图2所示。

2.3 运行结果及分析

结果数据以图表的形式展示出来,如图3和图4所示分别为蚁群算法最短路径和各代的收敛情况。

从图中可以看出,本算法得到的最短距离为15601.9195km,而最短距离在迭代了100次以后基本上就接近最短路径了,平均距离也在迭代次数达到100次后趋于平缓。程序运行的输出结果为:

Elapsed time is 119.372972 seconds

最短距离:15601.9195

最短路径:14 12 13 11 23 16 5 6 7 2 4 8 9 10 3 18 17 19 24 25 20 21 22 26 28 27 30 31 29 1 15 14

从理论上来讲,蚂蚁个数的不同,会导致运行的结果不同。在其他参数不变的情况下,蚂蚁越多,最后运行的结果越接近最优值。这里就蚂蚁个数m对结果的影响进行了试验,蚂蚁数分别为5,10,15,…,100,每组都运行程序30次,对所得结果分析,取出最大值、最小值和平均值,结果如表1所示。

使用Matlab将表1所得平均最短距离和蚂蚁个数生成图表可以清晰的反映出蚂蚁个数对平均最短距离的影响,如图5所示。

从图5可以看出,随着蚂蚁数量的增多,所取得的平均最短距离也在趋于平缓,接近15602。

3 结束语

通过在Matlab上运行蚁群算法,实现了蚁群算法解决TSP问题的目的,调整程序中的蚂蚁个数,得到了不同数量蚂蚁情况下的最短距离,验证了蚂蚁数量的增多更利于求解最优解的想法,为以后的实际问题如车辆运输问题、人员疏散问题提供了依据。

摘要:蚁群算法是近些年来兴起的一种智能算法,具有较强的鲁棒性。介绍了蚁群算法的工作原理和数学模型,并提出了基于Matlab的算法程序步骤,以旅行商问题进行了算法实现,给出了运行的最优结果。就蚂蚁个数的不同对结果的影响进行了深入研究,为蚁群算法在实际问题中的改进提供了借鉴。

关键词:蚁群算法,信息素,旅行商问题

参考文献

[1]高尚,杨静宇.群智能算法及其应用[M].北京:中国水利水电出版社,2006:34-36.

[2]段海滨.蚁群算法原理及其应用[M].北京:科学出版社,2005:1-18.

[3]多里戈,施蒂茨勒.蚁群优化[M].北京:清华大学出版社,2007:98-110.

[4]段海滨,张祥银,徐春芳.仿生智能算法[M].北京:科学出版社,2011:36-48.

上一篇:羊水检查的临床应用下一篇:曲线切线