首页 > 文章中心 > 波动方程

波动方程

前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇波动方程范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。

波动方程

波动方程范文第1篇

关键词: 瀑布型多重网格方法;矢量有限元;外推;矢量波动方程

中图分类号:O 24182

文献标志码:A文章编号:1672-8513(2011)04-0267-05

A New Cascadic Multi-Grid Method for the Vector Wave Equation

LU Kangmei,LI Chengliang,CAO Yanbin

(School of Mathematics and Computational Science,Guilin University of Electronics Technology,Guilin 541004,China )

Abstract: The vector finite element method,which can effectively avoid the spurious modes,is widely used in the analysis of electromagnetic problems,as is the case in the discrete calculating of the vector wave equation.The finite element extrapolation technique for the eigenvalue problem, which is proposed by Yang Yi-duo,is extended and applied to eigenvalue problems of vector wave equation.In this paper,a new cascadic multi-grid method based on the vector field eigenvalue problem is proposed,based on the extrapolation technique.The numerical results show that the new method is a very accurate and efficient method.

Key words: cascadic multi-grid method;vector finite element;extrapolation;vector wave equation

在微波理论和技术中,谐振腔本征值问题是最基本的问题之一.很多微波部件和系统的分析与最优化设计又往往以该问题的求解为基础.矢量有限元方法是近10年来在电磁场计算中应用比较广泛的一种方法.只要选择了合适的矢量基,所考虑结构的内部和外部边界都能够从数学上自然满足,就能够很好地解决伪解问题;又因为有限元方法的网格划分能很好地模拟实际结构,因此我们选择了矢量有限元对谐振腔进行离散计算.

多重网格方法,对于求解由微分方程离散化得到的方程组来说,是目前最快速高效的方法之一,它的求解的工作量可降为O(n)或O(nlnn).因此它在计算电磁场问题上得到了广泛的关注,最近一些学者发展了基于棱边元的多重网格算法[1-6].瀑布型多重网格无需粗网格校正,它比一般的多重网格方法计算量减少了,从而提高了计算效率,然而基于棱边元上的瀑布型多重网格方法的研究还是比较少的,特别是矢量场的本征问题,目前研究的也较少.

外推算法是由林群, 陈传淼等[7-8]引入到有限元求解偏微分方程,杨一都在文献[9]中引进了本征有限元外推的一个新技术, 李永明等[10]将有限元外推应用到了波导本征问题.本文在其基础上, 将其推广应用到矢量波动本征问题, 具体的算例表明其可行性和高精度性.

本文结合外推技术,提出了一种基于矢量场本征问题的瀑布型多重网格方法.数值算例结果说明该方法的有效性和实用性.

1 数学基础

对于一个填充相对介电常数为εr和相对磁导率为μr介质的封闭谐振腔体,对应的矢量波动方程为

其中ε为精度控制参数. 以上迭代过程简记为(λj,uj)=NC{(j,j)}.

2.3 外推技术

定理1 设剖分是强正规的, 又设λ为对应于波导本征问题的简单本征值, 相应的规格化本征函数u∈C4(Ω), 则本征值外推估计为:

λ=13(4λh/2-λh)+ο(h4).

详细证明见文献[9].

类似的,设某矩形谐振腔在粗矩形剖分单元下计算得到的本征值为λh, 随后在此粗剖分基础上加密剖分1次, 再计算得到的本征值为λh/2 ,则根据定理1 ,此矩形谐振腔本征值可由外推λhw=13(4λh/2-λh)(记为λhw=E(λh/2,λh)),得到更精确的解.

2.4 矢量波动本征问题的瀑布型多重网格算法

对于矢量有限元离散产生的一系列本征方程组Aiui=λiBiui(i=0,1,2,…,l), 若要求解最细网格层l层上本征方程Alul=λlBlul, 我们结合外推技术给出如下求解该本征问题的新瀑布型多重网格算法.

由图2,我们也可以看出随着网格的加密计算的精度越来越高,从而验证了算法的快速收敛性,且和一般的瀑布型多重网格方法比较计算精度也提高了很多.

4 结语

从上述的算法公式,以及矩形谐振腔的谐振频率计算结果的分析可以看到,利用瀑布型多重网格方法大大减少了计算量,将外推推广应用到谐振腔本征问题求解精度得到了很大的提高,因此在比较少的单元剖分下便可以较大的提高计算精度.计算过程也比较简单,易于编程,因此该算法在现代数值计算中是一种十分实用、简单、高效的新方法.

参考文献:

[1]WATANABE K ,IGARASHI H .Robustness of nested multigrid method for edge-based finite element analysis [J]. IEEE Transactions on Magnetics, 2009,45(3):1088-1091.

[2]TSAI C L ,WANG W S .An improved multigrid tcchnique for quasi-TEM analysis of a microstrip embedded in an inhomogeneous anisotropic medium[J].IEEE Trans. Microwave Theory Tech,1997,45(5): 678-686.

[3]WEISS B ,BIRO O .Edge element multigrid solution of nonlinear magnetostatic problems[J]. Comple,2001,20(2):357-365.

[4]SCHINNERL M ,SHOBERL J ,KALTENBACHER M. Nested multigrid methods for the fast numerical computation of 3D magnetic fields[J]. IEEE Trans Magn,2000,36:1539-1542.

[5]WATANABE K ,IGARASHI H ,HINMA T.Comparison of geometric and algebraic multigrid methods in edge-based finite-element analysis[J]. IEEE Transactions on Magnetics,2005,41(5):1672-1675.

[6]金建铭,王建国,葛德彪.电磁场有限元方法[M].西安:西安电子科技大学出版社,2001:165-186.

[7]陈传淼,黄云清.有限元高精度理论[M].长沙:湖南科学技术出版社,1995:451-492.

[8]李郴良,陈传淼,许学军.基于超收敛和外推方法的一类新的瀑布型多重网格方法[J].计算数学,2007,37(9):1083-1098.

[9]杨一都.本征值有限元外推的一个新技术[J].贵州大学学报:自然科学版,1989,6(3):6-11.

波动方程范文第2篇

【关键词】铝箔 加工 排产 优化

铝箔的生产,在工艺方面和材料的使用方面要求都比较高。需要的工艺流程复杂,要经过焙铸、热轧铸轧、冷轧、箔材轧制、分切等加工工艺和热处理过程才能对铝制品进行加工,工序比较长、难度比较大。铝箔的生产技术不断的发展使我国在铝箔方面的消费比例不断的提高但是铝箔的生产水平还依然存在很多问题,对于加工方法还有待研究。本文对超薄铝箔的加工动态集成排产方法进行研究。

1热轧问题的使用方法

1.1数学规划方法

在热轧的问题上,我们早期使用的方法是数学规划的方法。数学规划模型的使用是利用动态的规划方法对离散钢铁企业的优化生产问题进行解决的。PVC板生产中的多开工时间调度问题开发出了一种TABU搜索启发的算法,这种算法的应用很大程度上减弱了开工时间的调度问题。分支界定算法的出现是对无缝钢管的轧制进行多阶段的分批调度问题的解决。而在轧机、加热炉、能力损耗和制造成本方面的调度目标模块所使用的是分支界定求解的方法。在国外,这几种方法得到了广泛的应用但是应用的时效性受到了限制。

1.2非数学规划的方法

非数学的规划方法可以分为两大类,主要是启发式方法和人工智能的方法。启发式方法是通过对计算过程和评价指数的运算在比较短的时间里,有意识的寻找最佳的解决方案。COWLING提出了一种决策系统,这种决策系统是以钢铁热轧过程的多模型为依据,利用TSBU的算法对调度问题进行有效的解决。热轧调度问题的简化是PCVRP的模型,同时提出了基于大规模邻域定义的局部搜索方法。模拟退火算法有时候也被用于求解热轧调度的相关问题。

1.3数学模型的建立

我国的研究者陈雄创造出了轧制批量计划问题的数学模型,这种数学模型分为启发式算法和模拟退火算法。我国在热轧批量计算问题的约束满意问题进行了处理,对轧热问题的PCTSP建模和该模蚁群的蒜放方面做出了研究。针对轧热问题的CVRP建模还提出了混合免疫算法。

上述的这些方法都是轧制生产中的优化排产的基本理论和方法。由于我国超薄铝箔的生产不断的发展,生产要求也随之提高,在排产计划和热处理方面要使生产具有动态性就要根据具体实际进行任务的不断完善和添加,随时对排产计划进行调整,排产的相关实时性要求和方法要快速的计算,增加可靠性和实用性特点。

2代数法建模

2.1符号函数的定义方法

I设置为铝卷号,I=1,2...,P。J为设备的编号,J=1,2,...,M。工艺路线矩形阵R。R是n*m型矩阵,其中元素R表示铝卷I在加工工艺路线中设备J所占的顺序位。铝卷号关系表E%表E中每行代表一个铝卷号的属性、各列分别表示物料编码、炉架号、直径、计划开始时间、加工时间、设备编号、工艺顺序号其中物料编码、设备编号、工艺顺序号、加工时间的数据来源于工艺路线矩阵和加工时间矩阵。图1所示为炉架和铝卷的几何尺寸其中a、b、h分别代表炉架的长、宽、高。条件如下所示:

H=h1+h2+h3

r1>r2>....rk rk+1>rk+2>....>rk2k

上排

h1>r1 h2>r1 u1=r1 u2=r1+r2

下排

H3>rk+1 h2>rk+1

图1.炉架和铝卷的几何参数

2.2第一次排序

第一次排序是对订单池中的铝卷进行排序,排序按照重要的程度和紧急的程度进行安排,优化的准则体现在评价指数当中。对调度问题的NP难度性,要选择计算量不大,计算时间不长的效果优化好的启发式目标函数作为评判的标准。

兼顾能够对设备的使用率提高、合同按照完工率和装炉系数等进行多样性目标的归集,评价的指数可以参照铝卷号和炉架号进行归类。第一次排序是对任务中的全部铝卷进行加工,按照从小到大的顺序进行排序。

2.3第二次排序

第二次排序是第一次排序的升级,把第一次排序截取的归属于统一最佳的铝卷进行内部的排序,使吕佳能够安装更多的铝卷,这样能够节省热处理电费。这种方法也被称为炉次计划,计划的步骤主要体现在:

首先,在按照排好的序列中从前向后截取铝卷直径之和小于或等于2a最好接近2a的铝卷子序列。

其次,从这种子序列中对铝卷进行选择,每隔一个选取一个,按照铝卷的直径大小排列,排列顺序是由小到大的排列顺序。

最后,将该两段铝卷分别摆放在支架的上下两排,对每个铝卷的位置是否满足约束条件进行检查,如果符合则排产成功,进行下一步,如果没有成功就要对两端序列进行保留。截取两端子序列,在四段中选配评价指数最小的又能满足条件的方案。然后输出铝卷的两次排序方式和炉架上的摆放方式。

2.4状态赋值

当设备为退火炉时,设定编号为K,设备轧机时设定编号为J。这种情况下设备的变量的计算方式主要有三种,分别表示为:

首先,设备编号为轧制设备时每一个炉架的第一铝卷开工时间为上一道热处理时间与本轮最后一个任务完成时间的最大值。每一个炉架非第一个铝卷轧制工序设备加工最近的铝卷被上一道工序加工完毕是具有以下公式:

在设备J没有加工铝卷时,铝卷被上一道程序加工时的公式是:

在这里i表示设备k加工的上一道铝卷,热处理工序的状态时间是在当前设备加工的前一个炉架的结束时间和当前铝卷时间的最大值。

3结语

综上所述,本文从铝卷的排产方法、炉架的布置以及生产的调度方面对超薄铝箔的生产排产方法进行了研究。按照订单的需求进行先后的排序,在同一个铝卷在炉架上的合理排放方式进行了分析。超薄铝箔具有工艺流程复杂性的特点,我们要对对象进行合并、分割、集中的特点运用相应的代数方法进行模型的建立以此促进按时完成订单和节能减排的一员。

参考文献:

波动方程范文第3篇

传统意义上的世界杯营销,往往是有实力的大品牌之间的商业博弈行为,更多的中小企业大多数时候只是看客。然而,在今年的南非世界杯期间,我们却看到了合作营销的亮点。淘宝商城联合中央电视手打造的世界杯营销新模式,在交叉整合双方资源的基础上, “实现了品牌厂商、央视和淘宝商城的三方共赢,让品牌在电子商务平台上发挥出巨大能量”。淘宝网CFO兼淘宝商城总经理张勇表示。

据悉,在6月11日至7月12日的31天内,淘宝商城的曲美、九阳、七匹狼、欧莎等数十家品牌商在世界杯期间购买央视一套、五套的广告资源,并与央视共同合作一档电视节目,在淘宝商城内搭建网上世界杯频道,同时,将央视“球迷狂欢节”节目中互动游戏“九宫格射门”与淘宝商城网上世界杯频道的秒杀活动连接起来。电视节目中,现场嘉宾所踢中的九宫格球门中的任一品牌,便会在淘宝零点世界杯频道的秒杀板块以1元价格秒杀。这种精准的促销广告形式。缩短了消费路径,直接将央视庞大的观众群导入到淘宝商城,传播效果通过网络平台的销售即刻展现。由此,大品牌可以更好地监控投放效果,把握市场需求;小品牌也“登堂入室”,进入了更多消费者的视野。

创新性的合作营销模式为淘宝商城在世界杯期间缔造了销售神话。据淘宝数据显示,在过去的31天,3000多万人次关注淘宝商城球迷狂欢节,为淘宝带来2390万元成交量。淘宝网世界杯相关产品的交易额更是达到了4390万元,是史上一个月交易额的44倍。当然,此次活动惠及更多的当属参与活动的淘宝商城的商家们。600%的点击增长,60%的销售增长,让商家们喜不自禁。

在众多品牌中,增长最惊人的是奥克斯空调,592%的点击增长令奥克斯的销售人员都瞠目结舌,“在6月就迎来销售高峰,我们都很吃惊。”销售增长获得215%的曲美也乐观地表示, “我们觉得,这样的模式不仅是商家遇到盛事时候的有效营销模式,以后也可以不断尝试,说不定还能在实践中不断出新。”

波动方程范文第4篇

一、FLIC文件格式的概述

FLIC文件事实上是对一个静止画面序列的描述,连续显示这一序列便可在上产生动画效果。FLIC文件结构简洁,弹出速度快,虽然每种基色最多只有256级灰度,图像深度只有8位,但使用起来很方便。

FLIC文件有两种类型:FLI文件和FLC文件。FLC文是FLI文件的进一步发展,它采用更高效的压缩技术,且其分辨率也不仅限于320×200。我们在PC上经常使用的FLI文件,因为它和VGA的320×200×256显示相匹配。

FLIC文件采取的压缩技术原理就是仅保存前一帧中改变的部分。这样占的空间小,弹出速度快。FLIC文件的结果可分为3个层次:文件层、帧层和块层。文件层给出了FLIC文件的基本特征。帧层定义了帧的缓冲和块中块的数目。块层包括块的大小、类型和实际数据。这样的层次结构很容易实现,特别是可以增加块的类型以满足新的需要,同时无需涉及原定义。

二、各层头的结构

1.FLI文件格式的结构定义

①文件头的结构定义

文件头长度为80H字节,其C语言结构定义如下

/*flifilehedaerstruct*/

typedefstruct{

unsignedlongfli-size;/*00H:文件总长度*/

unsignedintmagic;/*04H:文件格式,FLC=AF12;

FLI=AF11;*/

unsignedintframes-number;/*06H:FLIC的帧数*/

unsignedintscreen-width;/*08H:屏幕宽度*/

unsignedintscreen-height;/*0AH:屏幕高度*/

unsignedintunuserd;/*0CH:保留未用*/

unsignedintflags;/*0EH:标志=0003*/

unsignedintspeed;/*10H:帧间播放速度单位*/

unsignedlongnext;/*12H:置为0*/

unsignedlongfrit;/*16H:置为0*/

unsignedcharfli-expand[102];/*1AH:保留作扩展用=0*/

}FLIHEAD;

②帧头的结构定义

帧头长度为10H字节,其C语言结构定义如下:

/*framesheaderstruct*/

typedefstruct{

unsignedlongsize-frame;/*00H:帧大小,包括本帧头*/

unsignedintmagic;/*04H:帧标识字=0F1FAH*/

unsignedintchunks;/*06H:本帧块数*/

unsignedcharexpand[8];/*08H:保留未用=0*/

}FRAMESHEAD;

③块头的结构定义

块头长度为6H字节,其C语言结构定义如下:

/*chunkheaderstruct*/

typedefstruct{

unsignedlongsize-chunk;/*00H:块大小*/

unsignedtype-chunk;/*04H:块类型*/

}CHUNKHEAD;

2.FLC文件格式的结构定义

文件头长度为80H字节,其C语言结构定义如下:

/*flifileheaderstruct*/

typedefstruct{

unsignedlongfli-size;/*00H:文件总长度*/

unsignedintmagic;/*04H:文件格式,FLC=AF12;

FLI=AF11;*/

unsignedintframes-number;/*06H:FLIC的帧数*/

unsignedintscreen-width;/*08H:屏幕宽度*/

unsignedintscreen-height;/*0AH:屏幕高度*/

unsignedintdepth;/*0CH:图像深度*/

unsignedintflags;/*0EH:标志=0003*/

unsignedintspeed;/*10H:帧间播放速度单位

FLC=1ms,FLI=1/70s*/

unsignedintreserved-1;/*14H:保留未用*/

unsignedlongcreatetime;

unsignedlongcreator;

unsignedlongupdatetime;

unsignedlongupdater;

unsignedintaspectx;/*创建文件时的显示屏幕像素大小的纵横比,VGA320×200

unsignedintaspecty;为6∶5*/

unsignedcharreserved-2[0x26];/*保留未用,=0*/

unsignedlongoffsetframel;/*50H:第一帧画面相对于文件

开始的偏移*/

unsignedlongoffsetframe2;/*54H:第二帧画面相对于文件

开始的偏移*/

unsignedcharreserved-3[0x28];/*保留未用=0*/

}FLIHEAD;

FLC的帧头和块头的结构定义和FLI文件格式的定义相同。

每块的数据紧接在FLIC文件头的后面。对于不同的块类型有不同的数据含义,下面就不同的块类型分别介绍,这是设计播放FLIC动画文件程序的关键之所在。

三、块类型的含义

FLIC格式文件中的块类型有许多种,每一种类型都有不同的定义,因此我们必须对每一种类型作出准确的分析。由于动画格式FLIC图像文件的块类型具有极强的可扩展性,在此我们只介绍几种常见的块类型。

1.类型04H

为每基色256级灰度的彩色调色板信息表FLIC-COLOR,其第一个字为需调色的调色子块数(一个字),紧接其后的是需调色的相应各块的数据定义:

字节含义

第一字节:跳色数,在本块中的需要跳过的颜色数(字节)。

第二字节:调色数,本块中有多少种颜色需要改变,当调色数为0时指调256色。初始时当前色号为零。

其后的字节:以三字节为一组,是需要改调色的相应的RGB值。

通常FLIC图像文件的头一帧的第一块数据便是该类型(或0BH类块)。在程序设计中我们定义了一个256色的调色板数组:

charpalette[768];

用于完成调色板的初始化工作。

2.类型07H

该类型数据以字节为基础,只适用于.FLC文件,处理对第一帧图像的改变情况较为适用。它含有本帧图像对于上与帧图像的改变部分。

这种块类型是一种最常用的、最复杂的块类型,一般除了第一帧外后面的各帧通常采用这种块类型进行行数据压缩存储。它的描述如下:

字节含义

(1)第一个字:需要改变的行的数量

(2)第二个字开始:是具体需要改变的数据本身。每一行是进行单独的压缩的,这种技术的采用大大压缩了.FLC文件长度。它的具体定义为:可选字、小块数及小块的值。①可选字:

当高位=11时,低位部分为跳行数。该字可以有多个,其跳行数相加。当高位=10时,低位部分内容为当前行的最后一个字节。(作为本行的结束标志)。②小块数:当高位=00时,此字表示小块数的值。③小块:第一个字节:跳列数。第二个字节:小块类型:当该值为正时:表示要从块中搬到图像中的像素(字)个数N,其后就是N个连续的像素数据;当该值为负时:它的绝对值N表示要重复从块中搬到图像中的像素(字)的次数,其后就是那个像素的数据

。第三个字节:块中的图像数据(字)。

3.类型0BH

与类型04H类似,它与VGA的13H模式相匹配。

4.类型0CH

与类型07H类似,但它以字节为基础,通常用于.FLI文件

字节含义

(1)第一个字:从屏幕上方开始和上一帧相同的行数即本帧中第一行要改变的行号。例如:如果有一个改变(运动)仅仅只是在屏幕的底部,那么此时该字值为199(VGA320×200)。

(2)第二个字:需要改变的行的数量。

(3)第三个字以后:是具体需要改变的数据本身。每一行是进行单独的压缩的,这种技术的采用大大压缩了.FIC文件长度。它的具体定义为:小块数及块的值。

①小块数:此字表示小块的个数值,它是本行中含有小块的个数。当小块数=0时,说明本行和上一行相同,不用进行重新处理。

②小块:第一个字节:跳列数。第二个字节:小块类型:当该值为正时:表示要从块中搬到图像中的像素(字节)个数N,其后就是N个连续的像素数据;当该值为负时:它的绝对值N表示要重复从块中搬到图像中的像素(字节)的次数,其后就是那个像素的数据。第三个字节:

块中的图像数据。

5.类型0DH

该类型没有数据,该帧的所有像素值都为0。在实际应用中通常它只产生在当用户使用3DS创建一个新的FLIC文件中的第一帧。

6.类型0FH

该类型用于压缩图像,通常只用于第一帧。它采用了Run-Length压缩方法。该方法与类型07H及0CH中的行数据压缩方法是相似的。只是在该方法中正负号的定义与类型07H和0CH恰好相反。

字节含义

(1)第一字节本行中小块数。

(2)第二字节小块的具体内容。

①第一字节:小块类型:当该值为负时:它的绝对值表示要搬到图像中的像素(字节)个数,其后就是数据;当该值为正时,表示要将下一个像素复制到图像中的次数,该像素(字节)紧随其后。

②第二个字节:块中的图像数据。

7.类型10H

这种类型不进行压缩,块中的数据个数一定为图像的长宽相乘。这种类型在实际应用中一般不用。

下面具体讨论播放程序的C语言程序设计方法,本文中的程序是针对.FLI格式的动画文件而进行的程序设计。读者如果要播放.FIC格式的动画文件,只需根据.FIC文件格式的具体定义,并参照下面的程序设计方法即可设计出相应的程序。

四、程序设计

1.第一帧图像的播放程序

voidFirst-Frame(Video-Mem,fli-fp)

char*Video-Mem;

FILE*fli-fp;

{

intLine-PacketNumber

intSize-Count=0

intScreen-Char;

longSereen-Count=0L;

memset(Video-Mem,0,60000);

do{

Line-PacketNumber=fgetc(fli-fp);

while(Line-PacketNumber--)

{

Size-Count=fgetc(fli-fp);

if((Size-COUNT&0X80)==0X80

{

Size-Count=(256-Size-Count);

while(Size-Count--)

{

Screen-Count++;

Sereen-Char=fgete(fli-fp);

*Video-Mem++=Screen-Char;

}

}

else

{

Sereen-Char=fgete(fli-fp);

while(Size-Count--

{

Screen-Count++;

*Video-Mem++=Sereen-Char;

}

}

}

}while(Screen-Count<64000);

}

2.FLI后续各帧图像的播放程序

voidOther-Frame(Video-Mem,Fli-fp,Update-LineNumber)

char*Video-Mem;

FILE*Fli-fp;

intUpdate-LineNumber;

{

intSize-Count=0,Skip-Col=0;

intUpdate-LineCount=0;

intScreen-Char;

intNumber-Packet;

char*Video-p;

while(Update-LineCount<Update-LineNumber)

{

Video-p=Video-Mem;

Number-Packet=fgetc(Fli-fp)

Update-LineCount++;

while(Number-Packet--)

{

Skip-Col=fgete(Fli-fp);

Video-Mem=Video-Mem+Skip-Col;

Size-Count=fgetc(Fli-fp);

if((Size-Count&0x80)==0x80)

{

Size-Count=256-Size-Count;

Screen-Char=fgetc(Fli-fp);

while(Size-Count--)*Video-Mem++=Sereen-Char;

}

else

{

while(Size-Count--){

Screen-Char=fgetc(Fli-fp);

*Video-Mem++=Screen-Char;

}

}

}

Video-Mem=Video-p+320;

}

}

3.播放程序的调用及其它几个子程序

voidTransmit-Fli(Fli-fp)

FILE*Fli-fp;

{

intNUmber-Chunk;

if(fread((unsignedchar*)&header,1,sizeof(FLIHEAD),Fli-fp)

==sizeof(FLIHEAD))

if(header,magie|=0xAF11)

{

printf("NotanFLIfile/n");

exit(0);

}

if(fread((unsignedchar*)*frame-head,1,

sizeof(FRAMESHEAD),Fli-fp)==sizeof(FRAMESHEAD));

if(frame-head,magic=0xF1FA)

{

printf("ReadinganErroeFLIfile\n");

exit(0);

}

if(fread((unsignedchar*)&chunk-head,1,

sizeof(CHUNKHEAD),Fli-fp)==sizeof(CHUNKHEAD));

if(fread(&NUmber-Chunk,1,sizeof(int),Fli-fp)==sizeof(int));

else{

printf("ErrorreadingFli\n");

exit(0);

}

fgetc(Fli-fp);fgetc(Fli-fp);

if(fread(&palette,1,sizeof(palette),Fli-fp)==768);

else{

printf("ErrorreadingFli\n");

exit(0);

}

if(fread((unsignedchar*)&chunk-head,1,

sizeof(CHUNKHEAD),Fli-fp)==sizeof(CHUNKHEAD));

else{

printf("ErrorreadingFli\n");

exit(0);

}

ShowFli-Frame(Fli-fp);

fclose(Fli-fp);

}

voidShowFli-Frame(Fli-fp)

FILE*Fli-fp;

{

longFrame-DataAddress;

intFirst-UpdateLine,End-UpdateLine;

intFrame-Number=2,Adjust-Char=0;

init();

setvgapalette(palette);

First-Frame(MK-FP(0x0a000,0x0),Fli-fp);

Frame-DataAddress=ftell(Fli-fp);

while(Frame-Number<=header,frames-number-1)

{

Frame-DataAddress=ftell(Fli-fp);

Adjust-Char=fgetc(Fli-fp);

if(Adjust-Char|=0)fseek(Fli-fp,-1L,SEEK-CUR);

if(fread((unsignedchar*)&frame-head,1,

sizeof(FRAMESHEAD),Fli-fp)==sizeof(FRAMESHEAD));

if(frame-head,magic|=0xFIFA)exit(0);

if(frame-head,chunks|=0)

{

if(fread((unsignedchar*)&chunk-head,1,

sizeof(CHUNKHEAD),Fli-fp)==sizeof(CHUNKHEAD));

if(fread(&First-UpdateLine,1,sizeof(int),Fli-fp)

==sizeof(int));

else{

printf("ErrorreadingFli/n");

exit(0);

}

if(fread(&End-UpdateLine,1,sizeof(int),Fli-fp)

==sizeof(int));

else{

prinft("ErrorreadingFli/n");

exit(0);

}

Other-Frame(MK-FP(0x0a000,First-UpdateLine*320),Fli-fp,

End-UpdateLine);

}

Frame-Number++;

}

}

voidvideo-init()

{

unionREGSr;

r.x.ax=0x0013;

int86(0x10,&r,&r);

}

voidvideo-text()

{

unionREGSr;

r.x.ax=0x0003;

int86(0x10,&r,&r);

}

setvgapalette(p)

char*p;

{

unionREGSr;

structSREGSsr;

inti;

for(i=0;i<768;++i)*(p+i)=*(p+i)>>1;

r.x.ax=0x1012;

r.x.bx=0;

r.x.cx=256;

r.x.dx=FP-OFF(p);

sr.es=FP-SEG(p);

int86x(0x10,&r,&r,&sr);

波动方程范文第5篇

【关键词】NGBOSS QTP 关键字驱动 自动化测试框架

随着3G业务的开展,三家运营商的竞争不断深入,NGBOSS系统作为全业务时代开展新业务的信息支持系统,需要快速的实现更新换代,以尽早满足快速发展的新业务需求。在多样化的新产品不断出现的同时,由于存在大量的在网用户,在NGBOSS系统建设过程中,原有产品模式需要同步支持,因此NGBOSS系统变的越来越复杂。客户对移动通信的服务质量提出了更高的要求,而NGBOSS系统的质量在一定程度上取决于系统测试的全面程度,在保证测试质量的前提下,降低测试成本,提高测试效率,改变以往单纯靠人工测试的方法,需要在测试方法上进行改进研究。

本文针对NGBOSS工程建设中的问题,重点关注软件业务测试,并通过自动化测试进行常规业务探测,实现系统故障的及时发现,提高客户的满意度。

1 自动化测试实施分析

自动化测试是一种把以人为驱动的测试行为转化为机器自动执行的方法。在目前的软件测试项目实施中,项目团队为了降低测试成本、提高测试效率,一般用自动化测试代替多重验证测试和手工测试。但是在软件项目中,项目管理人员对于自动化测试的认识仍存在一些疑问和误解,例如任何测试项目都可以自动化;用自动化测试取代手工测试;在赶进度的情况下,紧急实施自动化测试。

自动化测试实施是与软件开发并行的一个软件项目开发过程,包含需求、设计、编码、自动化平台代码调试测试、上线、上线后运行等完整的软件生命周期。上线前自动化测试项目处于投入阶段,在上线后的运行期进行用例编写、脚本调试、自动化脚本运行,此时自动化平台进入效益产出阶段。

对于一个完整的定制化的自动化测试平台工程项目来讲,需要项目团队在实施立项阶段考虑自动化开发成本和产出的效益。只有产生的效益大于实施成本和人工测试的成本时,才有实施自动化测试工程的必要。自动化测试实施的成本包括自动化测试团队人力成本、软硬件开发成本。

假设成本总计为N,共对x个业务进行自动化测试实施。x个业务进行手工测试需要人力成本为a。创收的计算方法是:假设x个业务不用自动化,进行手工测试需要人力成本为a,那么当这x个业务都用自动化脚本执行后,每执行一次批量自动化,就节省成本a。当重复执行M次后,节省的劳动力成本M*a就是自动化项目的收益,即:M*a>N。因此可通过控制成本,最小化N和增加重复执行次数M,实现自动化测试实施效益的最大化。

在具体实施时,控制成本的方法一般有:在框架方面简化框架,以稳定为主,能用就好,防止过度开发;在脚本方面,简洁易开发,同时稳定脚本,尽量减小维护成本。创造的效益取决于执行次数和脚本覆盖率,因此脚本批量执行的次数越多,脚本覆盖业务的比例越大,节省的人力成本就越多,创造的效益越大。

通过以上分析,可以总结出适合进行自动化测试的工程项目必须具有的特点包括:一是项目比较成型,测试需求不会频繁变动,否则脚本维护成本太高;二是项目周期足够长,可以进行自动化项目开发和实施;三是脚本会被多次复用,执行的次数越多,自动化越有意义,否则,就没有必要开发自动化。

当一个项目满足以上特点,成功执行自动化测试后,意义是非常明显的:一是节省人力成本,提高测试效率;二是自动化测试提供区别于手工测试的另一种验收标准,通过自动化测试报告用数据说话,并且自动化测试通常能发现手工测试无法发现的BUG;三是做手工测试无法做或者很难做的测试,如模拟测试、危险测试。

NGBOSS作为中国移动的新一代业务支撑系统,前台业务复杂,涉及个人业务、家庭业务和集团业务等全部业务办理及计费过程。项目实施时间长,上线后会持续运行3~4年时间,随着电信行业竞争的加剧,系统版本更新更加频繁。以广东为例,一般每年进行12次常规性升级,在每次升级后均需要进行常规业务的验证,若采用自动化测试实施后,可以采用自动化测试脚本进行常规业务探测,降低系统故障率。通过以上分析,在NGBOSS系统中实施自动化测试,可以实现测试效率的提升和测试成本的下降,因此有必要实施自动化测试平台的建设。

2 自动化测试构建思路

结合自动化测试实施成本和效益理论的分析,通过对目前常见的自动化测试流程进行研究,提出改进的方案。自动化实现的基本原理均是录制回放,将录制出来的脚本进行回放,就实现了自动化执行。本文以QTP(Quick Test Professional)进行脚本录制和回放。下面以QTP为基础,研究适合NGBOSS工程建设的自动化建设思路。

传统的自动化测试流程如图1所示,是面向过程的线性流程,目前业内最通用。

在这个流程下,业内主要有两种自动化模式:

(1)录制回放模式

录制回放模式的原理是以QTP录制的VBS脚本为基础,增加代码控制逻辑,将修改调试好的VBS脚本返给QTP回放,实现自动化。这种模式,脚本实质上是VBS代码,优点是可调用VBS多种函数,并能使用控制逻辑如if、else、exit、for等。缺点是维护成本较高,页面、逻辑、数据的变更都要遍历整个脚本,对涉及到的变更进行修改。在这种模式下,自动化流程是直线型的一维模式,逻辑、数据全都捆绑在脚本上,导致难以拆分业务,设计用例复杂,最终导致脚本凌乱。

(2)数据驱动模式

数据驱动模式,是在录制回放模式的基础上,将数据输入存储在独立的数据文件中,脚本只存放控制信息,测试时输入直接从文件中读取,这样同一脚本可以运行于不同的测试用例中,实现了脚本与数据的分离。这是一种二维模式,脚本和数据可分别设计,业务线条变得清晰。但此种模式仍需通过编写VBS脚本方式实现测试用例的编写,在涉及到多业务系统脚本编写时,脚本重复度高,用例编写需要专业的自动化测试人员进行。面对NGBOSS业务复杂的情况,重点业务一般有50~60项,全部通过VBS脚本实现,将带来自动化测试人力成本的快速提高。因此需要考虑通过降低脚本编写难度,使一般的手工测试人员经过简单的培训后,即可进行自动化测试用例编写工作,并实现测试用例编写人员和专业测试工具的解耦。

在传统自动化测试流程基础上,新建一个分层模型,对自动化过程进行分离、优化(如图2),自下向上分别为模型层、数据层、控制层和应用层。

(1)模型层是最底层,由测试工具识别的控件对象以及对象的识别脚本构成,模型层负责将控件对象和识别脚本分别组织并以友好的方式提供给数据层的标签库模块使用。

1)对象识别脚本在使用QTP录制时,QTP自动记录对象并生成测试脚本。该测试脚本包含了对对象的识别、执行动作和测试数据,使得测试脚本难以重用和维护。本文在测试框架模型层中只保留对对象的识别脚本,而把测试数据放到数据层、执行动作放到控制层管理,从而实现了相互之间的分离。

2)控件对象在测试框架模型层中,通过对界面元素的分析(UI分析)并和QTP对象识别机制相映射来组织控件对象。UI分析是从被测系统界面入手,记录页面层次并把该页面中的对象以要素的形式记录到数据库中,以达到结构化。

(2)数据层由标签库和测试数据库构成,标签库保存要素名和识别脚本的映射关系,测试数据库保存具体的测试数据。

1)标签库

标签库是针对某一个应用建立的,它可以通过学习而扩展,其中包含了图形用户界面交互的完整细节,包括界面和对象。本文通过打标的方式来对具体交互细节进行封装:首先利用QTP录制待测系统的执行过程,获取各测试对象的脚本;然后对录制脚本进行打标,实现要素名和测试对象的对应;最后对打标后的脚本进行分解并提取识别脚本和标签,生成标签库。

2)测试数据库

测试数据库提供具体的测试数据,其中测试数据与UI分析得到的测试对象相对应,每个测试对象根据系统需要,有不同的业务规则,如果业务规则比较复杂,则把业务规则分解成最小颗粒。针对每一个最小业务颗粒,测试人员至少要准备2组测试数据,分别为正例和反例:正例是指符合该测试点测试数据;反例是指不符合该测试点的测试数据。执行测试时必须保证正例能通过而反例不能通过,否则就说明该处存在BUG。

(3)控制层为自动化测试框架提供了一个控制入口,测试工程师利用控制层实现具体的测试意图:测试工程师可以对测试的执行顺序根据需要进行调整,使得测试不必按录制顺序回放;可以通过关键字设置对象的执行动作,实现各种操作;并可通过要素名匹配测试数据。

(4)应用层通过用例描述原语(ASL)具体实现测试的执行:ASL首先获取测试案例的某一控制文件,得到该测试逻辑并解析出测试数据标志和标签;然后通过要素标签在标签库中查找相应脚本,匹配测试数据库中测试数据,组合生成测试工具QTP可以执行的脚本;最后调用测试工具QTP实施自动化测试。

在这个模型下,主要有以下两种自动化模式:

(1)关键字驱动模式

关键字驱动模式是在数据驱动模式基础上简化脚本、分离业务。通过关键字描述语言,代替VBS代码语言,将业务逻辑从复杂的代码行转化成肉眼可见的一个个关键字语言描述行,实现业务、脚本和数据的分离。

(2)增强型关键字驱动模式

增强型关键字驱动模式是在关键字驱动的基础上开发自动化测试辅助平台,进一步实现脚本和业务的分离。这种模式是在已经开发关键字模式的基础上进行增量精确开发。

以上四种自动化模式,各有各的优缺点。总的来说,自动化技术和理念越来越先进,自动化开发成本呈递增趋势,自动化维护成本呈递减趋势。

从业务和自动化开发综合考虑:业务上,BOSS系统耦合性高、业务复杂,必须要将自动化从复杂的业务中剥离出来;自动化开发需综合考虑技术成熟度、开发成本、维护成本。

本文采用关键字驱动模式,而增强型关键字驱动模式,开发成本较高。可以先考虑开发关键字驱动模式,后面再视具体项目情况考虑是否开发辅助平台。下面将重点研究关键字驱动模式。

关键字驱动模式的实现思想是通过以关键字为驱动的脚本来取代QTP的VBS代码行脚本。下面举一个百度搜索的例子。

使用QTP录制一行打开百度的脚本如下:

SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe","","C:\Documents and Settings\automind","open"

Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set "search"

Browser("百度一下,你就知道").Page("百度一下,你就知道").WebButton("百度一下").Click

这是普通模式下的脚本,在关键字驱动模式下,是要把这种VBS代码行脚本转化为以关键字为驱动的直观的脚本。以目前一种成熟的关键字驱动模式为例,上面这些VBS代码行等价于表1的脚本:

在这种模式下,脚本形式为Excel脚本,上面的脚本,使用Open、With、Type、Click四个关键字。这种模式将函数执行封装成关键字,并以Excel的形式编写脚本。框架将Excel脚本解析成VBS代码行,返回给QTP执行。

以上举例展现4个关键字。实际使用过程中,一般有四大类型关键字:一是操作类,用来实现动作执行,关键字一般有Wwith、Call Function、Open、OpenApp、Click、DbClick、Type、TypePath、TypeDate、ClickTable、TreeSelect等;二是控制类,用来实现脚本逻辑控制,关键字一般有满足条件执行脚本、跳转、循环等,如if、else、for、exit等;三是检查类,对执行过程中的对象或者产生的数据进行检查,确保业务流程的正确性,如assertSelected、assertNotSelected、assertChecked、GetTableData等;四是数据类,连接数据库,执行数据增删改查,如Run Sql、Run Sql Select等。

通过关键字驱动模式进行编写,可实现如下提升:Excel形式的脚本,通过关键字编写测试用例,一般熟悉测试的人员即可进行自动化测试用例的编写;Excel脚本中分information、script和data三个工作薄,information为脚本总体信息,script为脚本控制和执行流程,data为数据组合;script和data实现脚本控制和数据的分离;脚本维护变得更简单;生成Excel时报告对应每一个Excel脚本执行行,报告清晰。

3 自动化对开展工程建设测试的意义

自动化测试的特点,决定了自动化测试无法取代手工测试。自动化测试与手工测试都只是工程测试的一部分。自动化的意义在于:

(1)降低测试成本,提升测试效率

自动化测试可部署在服务器上,定时晚上执行,提升测试效率。假设自动化测试覆盖600个业务,由10个测试人员来执行,每人每天可执行30个业务,那么执行这600个业务一次,需要20人天的人力,10个人要执行2天。如果让自动化测试来执行,几台服务器晚上并行执行,即可执行完毕。也就是说,10个人执行600个业务1次,可节省10个人力和2天时间。如果自动化覆盖的业务更多,执行的次数翻倍,节省的人力和时间将成几何指数上升。

(2)为工程测试提供区别于手工测试的验收标准

自动化测试与手工测试的出发点不一样,从效果看,自动化测试经过多次执行,会发现一些手工测试无法发现的缺陷,弥补手工测试的不足。

事实上,发现BUG并非自动化的主要作用,甚至可以说,项目测试发现的BUG越多,自动化测试越难执行下去。一般来讲,手工测试能发现70%~80%的BUG,自动化测试能发现15%~30%的BUG。从BUG分布来讲,有交叉重叠部分,也有隐藏的都没有发现的部分。自动化能独立发现的BUG往往是小概率的,需要重复执行才能出现的隐性BUG。例如,在一次自动化测试执行过程中,发现程序core了一次,根据记录的日志,最终定位发现,原来是一起内存泄露故障。这种例子非常常见。

(3)回归测试版本测试

在回归测试和版本测试中,自动化测试可以得到大量应用,可以完全代替手工测试,从而释放人力。

参考文献:

[1] 王磊. 关键字驱动的自动化测试框架设计与实现[J]. 电子测试, 2010(8): 87-93.

[2] 接卉,兰雨晴,骆沛. 一种关键字驱动的自动化测试框架[J]. 计算机应用研究, 2009(3).

[3] 李弦,陈恭亮. 基于BOSS系统的业务量分析研究[J]. 移动通信, 2010(12): 92-95.

相关期刊更多

中国物价

部级期刊 审核时间1个月内

国家发展和改革委员会

产经评论

CSSCI南大期刊 审核时间1-3个月

暨南大学

石油地球物理勘探

北大期刊 审核时间1-3个月

中国石油天然气集团有限公司