当前位置:文档之家› 迭代器模式实验报告

迭代器模式实验报告

迭代器模式实验报告
迭代器模式实验报告

洛阳师范学院信息技术学院

软件实验报告

专业: 软件工程 课程: 设计模式

学号:101164028姓名:陈亚平 班级: 10软件工程

24种设计模式的定义和使用场合

一.创建型模式(Creational): 简单工厂模式(simpleFactory)发音:['simpl] ['f?kt(?)r?] 定义: 提供一个创建对象实例的功能,而无须关心其具体实现.被创建实例的类型可以是接口,抽象类,也可以是具体的类. 1.抽象工厂(AbstractFactory)发音: ['?bstr?kt] 定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 使用场合: 1.如果希望一个系统独立于它的产品的创建,组合和表示的时候,换句话书,希望一个系统只是知道产品的接口,而不关心实现的时候. 2.如果一个系统要由多个产品系列中的一个来配置的时候.换句话说,就是可以,就是可以动态地切换产品簇的时候. 3.如果强调一系列相关产品的接口,以便联合使用他们的时候 2.建造者模式(Builder)发音: ['b?ld?] 定义: 将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 使用场合: 1.如果创建对象的算法,应该独立于该对象的组成部分以及它们的装配方式时 2.如果同一个构建过程有着不同的表示时 3.工厂方法模式(Factory Method) 定义: 为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟到了子类. 使用场景: 1.客户类不关心使用哪个具体类,只关心该接口所提供的功能. 2.创建过程比较复杂,例如需要初始化其他关联的资源类,读取配置文件等. 3.接口有很多具体实现或者抽象类有很多具体子类时, 4.不希望给客户程序暴露过多的此类的内部结构,隐藏这些细节可以降低耦合度. 5.优化性能,比如缓存大对象或者初始化比较耗时的对象. 4.原型模式(Prototype Method)发音: ['pr??t?ta?p] 定义: 使用原形实例指定将要创建的对象类型,通过复制这个实例创建新的对象. 应用场合: 1.如果一个系统想要独立于它想要使用的对象时,可以使用原型模式,让系统只面向接口编程,在系统需要新的对象的时候,可以通过克隆原型来得到. 2.如果需要实例化的类是在运行时刻动态指定时,可以使用原型模式,通过克隆原型来得到需要的实例.

插值法数值上机实验报告

插值法数值上机实验报告 实验题目: 利用下列条件做插值逼近,并与R (x) 的图像比较 考虑函数:R x y=1 1+x2 (1)用等距节点X i=?5+i,i=0,1,...,10.给出它的10次Newton插值多项式的图像; π),i=0,1,...,20.给出它的20次Lagrange插值多项式(2)用节点X i=5cos(2i+1 42 的图像; (3)用等距节点X i=?5+i,i=0,1,...,10.给出它的分段线性插值函数的图像;(4)用等距节点X i=?5+i,i=0,1,...,10.给出它的三次自然样条插值函数的图像; (5)用等距节点X i=?5+i,i=0,1,...,10.给出它的分段三次Hermite插值函数的图像; 实验图像结果:

实验结果分析: 1.为了验证Range现象,我还特意做了10次牛顿插值多项式和20次牛顿插值多项式的对比图像,结果如下图(图对称,只截取一半) 可以看出,Range现象在高次时变得更加明显。这也是由于高次多项式在端点处的最值随次数的变大很明显。可以料定高次多项式在两侧端点处剧烈震荡,在更小的间距内急剧上升然后下降,Range现象非常明显。

2.分析实验(2)的结果,我们会惊讶地发现,由于取21个点逼近,原本预料的Range现象会很明显,但这里却和f(x)拟合的很好。(即下图中Lagrange p(x)的图像)。可是上图中取均匀节点的20次牛顿多项式逼近的效果在端点处却很差。料想是由于节点X i=5cos2i+1 42 π ,i=0,1,...,20 取得很好。由书上第五章的 知识,对于函数y=1 1+x ,y 1 2对应的cherbyshev多项式的根恰好为X i= 5cos2i+1 42 π ,i=0,1,...,20 。由于所学限制,未能深入分析。 (3)比较三次样条插值图像和Hermit插值图像对原函数图像的逼近情形。见下图:

计算方法第二章方程求根上机报告

实验报告名称 班级:学号:姓名:成绩: 1实验目的 1)通过对二分法与牛顿迭代法作编程练习与上级运算,进一步体会二分法与牛顿迭代法的不同特点。 2)编写割线迭代法的程序,求非线性迭代法的解,并与牛顿迭代法。 2 实验内容 用牛顿法和割线法求下列方程的根 x^2-e^x=0; x*e^x-1=0; lgx+x-2=0; 3实验步骤 1)根据二分法和牛顿迭代法,割线法的算法编写相应的求根函数; 2)将题中所给参数带入二分法函数,确定大致区间; 3)用牛顿迭代法和割线法分别对方程进行求解; 3 程序设计 牛顿迭代法x0=1.0; N=100; k=0; eps=5e-6; delta=1e-6; while(1) x1=x0-fc1(x0)/fc2(x0); k=k+1; if k>N disp('Newmethod failed')

break end if(abs(x1-x0)=delta) c=x1; x1=cutnext(x0,x1); x0=c; %x0 x1μYí?μ?μ?x1 x2 è?è?±£′??úx0 x1 end k=k+1; if k>N disp('Cutline method failed') break; end if(abs(x1-x0)

迭代器模式实验(含答案)

课程名称:软件体系结构与设计 迭代器(Iterator)模式实验 一、实验目的 1. 掌握迭代器模式的概念; 2. 掌握迭代器模式的功能; 3. 加深对迭代器模式的了解; 4. 提高对迭代器模式的运用; 5. 将该模式运用但实际的生活中。 二、实验内容 1. 阅读和查看资料了解迭代器模式的概念和功能; 2. 将有关代理模式的迭代器模式理解透彻并运行; 3. 举例说明生活中的一个可以使用迭代器模式的例子; 4. 熟悉迭代器模式的扩展,迭代器模式是比较有用途的一种模式, 而且变种较多,应用场合覆盖从小结构到整个系统的大结构。三、实验环境 Windows7 、Java虚拟机、MyEclipse 环境下运行代码。 四、实验设计原理 迭代器(Iterator)模式,又叫做游标(Cursor)模式。它提供一种方法顺序访问一个聚合对象(或容器对象:container)中各个元素, 而又不需暴露该对象的内部。 聚合:表示一组对象的组合结构,比如JAVA中的数组,集合等从定义可见,迭代器模式是为容器而生。很明显,对容器对象的访问必然

涉及到遍历算法。你可以一股脑的将遍历方法塞到容器对象中去;或者根本不去提供什么遍历算法,让使用容器的人自己去实现去吧。这两种情况好像都能够解决问题。 然而在前一种情况,容器承受了过多的功能,它不仅要负责自己“容器”内的元素维护(添加、删除等等),而且还要提供遍历自身的接口;而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历。第二种方式倒是省事,却又将容器的内部细节暴露无遗。 而迭代器模式的出现,很好的解决了上面两种情况的弊端。 迭代器模式的类图如下图所示: 类图解读: 从结构上可以看出,迭代器模式在客户与容器之间加入了迭代器角色。迭代器角色的加入,就可以很好的避免容器内部细节的暴露,

等厚干涉牛顿环实验报告材料97459

等厚干涉——牛顿环 等厚干涉是薄膜干涉的一种。薄膜层的上下表面有一很小的倾角是,从光源发出的光经上下表面反射后在上表面附近相遇时产生干涉,并且厚度相同的地方形成同一干涉条纹,这种干涉就叫等厚干涉。其中牛顿环是等厚干涉的一个最典型的例子,最早为牛顿所发现,但由于他主张微粒子学说而并未能对他做出正确的解释。光的等厚干涉原理在生产实践中育有广泛的应用,它可用于检测透镜的曲率,测量光波波长,精确地测量微笑长度、厚度和角度,检验物体表面的光洁度、平整度等。 一.实验目的 (1)用牛顿环观察和分析等厚干涉现象; (2)学习利用干涉现象测量透镜的曲率半径; 二.实验仪器 读数显微镜钠光灯牛顿环仪

三. 实验原理 牛顿环装置是由一块曲率半径较大的平凸面放在一块光学玻璃平板(平镜)上构成的,如图。平凸透镜的凸面与玻璃平板之间的空气层厚度从中心到边缘逐渐增加,若以平行单光垂直照射到牛顿环上,则经空气层上、下表面反射的两光束存在光程差,他们在平凸透镜的凸面相遇后,将发生干涉。从透镜上看到的干涉花样是以玻璃接触点为中心的一系列明暗相间的圆环,称为牛顿环。同一干涉环上各处的空气层厚度是相同的,因此他属于等厚干涉。 图2 图3 由图2可见,若设透镜的曲率半径为R ,与接触点O 相距为r 处空气层的厚度为d ,其几何关系式为 2222222)(r d Rd R r d R R ++-=+-= 由于r R >>,可以略去d 2得

R r d 22 = (1) 光线应是垂直入射的,计算光程差时还要考虑光波在平玻璃上反射会有半波损失,,从而带来2λ的附加程差,所以总光程差为 2 2λ + =?d (2) 所以暗环的条件是 2 ) 12(λ +=?k (3) 其中 3,2,1,0=k 为干涉暗条纹的级数。综合(1)(2)(3)式可得第可k 级暗环的半径为 λkR r k =2 (4) 由式(4)可知,如果单色光源的波长λ已知,测出第m 级的暗环半径r m,,即可得出平图透镜的曲率半径R ;反之,如果R 已知,测出r m 后,就可计算出入射单色光波的波长λ。但是用此测量关系式往往误差很大,原因在于凸面和平面不可能是理想的点接触;接触压力会引起局部形变,使接触处成为一个圆形平面,干涉环中心为一暗斑。或者空气间隙层有了灰尘,附加了光程差,干涉环中心为一亮(或暗)斑,均无法确定环的几何中心。实际测量时,我们可以通过测量距中心较远的两个暗环半径r m 和r n 的平方差来计算曲率半径R 。因为 λMR r m =2 λnR r n =2 两式相减可得 λ)(22n m R r r n m -=-

软件体系结构与设计模式笔记

第1章软件体系结构概述 ?SEI软件体系结构讨论群定义如下:一个程序/系统构件的结构,它们之间的相互关系,以及在设计和交付的整个过程中的原则和指导方针。 ?Mary Shaw和David Garlan认为软件体系结构包括构成系统的设计元素的描述,设计元素的交互,设计元素组合的模式,以及在这些模式中的约束。 ?软件体系结构包括构件(Component)、连接件(Connector)和约束(Constrain)或配置(Configuration)三大要素。 ?国内普遍接受的定义:软件体系结构包括构件、连接件和约束,它是可预制和可重构的软件框架结构。 ?构件是可预制和可重用的软件部件,是组成体系结构的基本计算单 元或数据存储单元 ?连接件也是可预制和可重用的软件部件,是构件之间的连接单元 ?构件和连接件之间的关系用约束来描述 ?软件体系结构= 构件+ 连接件+ 约束 软件体系结构的优势容易理解、重用、控制成本、可分析性 第2章软件体系结构风格 ?软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。 ?体系结构风格定义了一个系统家族,即一个体系结构定义一个词汇表和一组约束。 词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。 ?体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。 ?数据流风格: 批处理序列; 管道/过滤器。 ?调用/返回风格:主程序/子程序;面向对象风格;层次结构。 ?独立构件风格:进程通讯;事件系统。 ?虚拟机风格:解释器;基于规则的系统。 ?仓库风格:数据库系统;超文本系统;黑板系统。 ?过程控制环路 ?C/S风格体系结构有三个主要组成部分:数据库服务器、客户应用程序和网络。 ?B/S风格浏览器/Web服务器/数据库服务器。 优点:C/S体系结构具有强大的数据操作和事务处理能力,模型思想简单,易于人们理解和接受。将大的应用处理任务分布到许多通过网络连接的低成本计算机上,以节约大量费用。缺点:开发成本较高、客户端程序设计复杂、信息内容和形式单一、用户界面风格不一,使用繁杂不利于推广使用、软件移植困难、软件维护和升级困难、新技术不能轻易应用 优点:基于B/S体系结构的软件,系统安装、修改和维护全在服务器端解决。 缺点:B/S体系结构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。 B/S体系结构的系统扩展能力差,安全性难以控制。 采用B/S体系结构的应用系统,在数据查询等响应速度上,要远远低于C/S体系结构。 B/S体系结构的数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OLTP)应用。 第3章软件需求与架构 ?需求的基本概念 ?IEEE (1997) ?(1) 用户解决问题或达到目标所需的条件或能力

牛顿环实验报告

北京师范大学珠海分校大学物理实验报告 实验名称:牛顿环实验测量 学院工程技术学院 专业测控技术与仪器 学号 1218060075 姓名钟建洲 同组实验者 1218060067余浪威 1218010100杨孟雄 2013 年 1 月 17日

实验名称 牛顿环实验测量 一、实验目的 1.观察牛顿环干涉现象条纹特征; 2.学习用光的干涉做微小长度的测量; 3.利用牛顿环干涉测量平凸透镜的曲率半径; 4.通过实验掌握移测显微镜的使用方法 二、实验原理 在一块平面玻璃上安放上一焦距很大的平凸透镜,使其凸面与平面相接触,在接触点 o 附近就形成一层空 气膜。当用一平行的准单色光垂直照射时,在空气膜上表面反射的光束和下表面反射的光束在膜上表面相遇相干,形成以 o 为圆心的明暗相间的环状干涉图样,称为牛顿环。如果已知入射光波长,并测得第 k 级 暗环的半径 r k ,则可求得透镜的曲率半径 R 。但 实际测量时,由于透镜和平面玻璃接触时,接触点有压力产生形变或有微尘产生附加光程差,使得干涉条纹的圆心和环级确定困难。第m 环与第n 环 用直径 D m 、 D n 。 () λ n m n D m D R +-= 42 2此为计算 R 用的公式,它与附加厚度、

圆心位置、绝对级次无关,克服了由这些因素带来的系统误差,并且D m 、 D n 可以是弦长。 三、实验内容与步骤 用牛顿环测量透镜曲率半径 (1).按图布置好实验器材,使用单色扩展光源,将牛顿环装置放在读数显微镜工作台毛玻璃中央,并使显微镜筒正对牛顿环装置中心。 (2).调节读数显微镜。 1.调节目镜,使分划板上的十字刻度线清晰可见,并转动目镜,使十字刻度线的横线与显微镜筒的移动方向平行。 2.调节45度反射镜,使显微镜视觉中亮度最大,这时基本上满足入射光垂直于待测量透镜的要求。 1.转动手轮A,使显微镜平移到标尺中部,并调节调焦手轮B,使物镜接近牛顿环装置表面。 2.对显微镜调焦。缓慢地转动调焦手轮B,使显微镜筒由下而上移动进行调焦,直到从目镜中清楚地看到牛顿环干涉条纹且无视差为止;然后移动牛顿环装置,使目镜中十字刻度线交点与牛顿环中心重合 (1).观察条纹的特征。 观察各级条纹的粗细是否一致,其间距有无差异,并做出解释。观察牛顿环中心是亮斑还是暗斑? (2).测量暗环的直径 转动读数显微镜的读数鼓轮,同时在目镜中观察,使十字刻度线由牛顿环中心缓慢地向一侧移动到43环;然后再回到第42环。自42环起,单方向移动十字刻度,每移3环读数一——直到测量完成另一侧的第42环。并将所测量的第42环到第15环各直径的左右两边的读数记录在表格内。 四、数据处理与结果 1.求透镜的曲率半径。 测出第15环到第42环暗环的直径,取m-n=15,用逐差法求出暗环的直径平方 差的平均值,按算出透镜的曲率半径的平均值R。 R1=(d422-d272)/[4(42-27]λ= 895.85 mm R2=(d392-d242)/[4(39-24]λ= 896.97 mm R3=(d362-d212)/(4(36-21)λ= 887.94mm R4=(d332-d182)/(4(33-18)λ= 893.30mm

数值分析实验报告记录

数值分析实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

数值分析实验报告 (第二章) 实验题目: 分别用二分法、牛顿迭代法、割线法、史蒂芬森迭代法求方程 的根,观察不同初始值下的收敛性,并给出结论。 问题分析: 题目有以下几点要求: 1.不同的迭代法计算根,并比较收敛性。 2.选定不同的初始值,比较收敛性。 实验原理: 各个迭代法简述 二分法:取有根区间的重点,确定新的有根区间的区间长度仅为区间长度的一版。对压缩了的有根区间重复以上过程,又得到新的有根区间,其区间长度为的一半,如此反复,……,可得一系列有根区间,区间收敛到一个点即为根。 牛顿迭代法:不动点迭代法的一种特例,具有局部二次收敛的特性。迭代格式为 割线法:是牛顿法的改进,具有超线性收敛的特性,收敛阶为1.618. 迭代格式为 史蒂芬森迭代法:采用不动点迭代进行预估校正。至少是平方收敛的。迭代格式为 这里可采用牛顿迭代法的迭代函数。 实验内容:

1.写出该问题的函数代码如下: function py= f(x) syms k; y=(k^2+1)*(k-1)^5; yy=diff(y,k); py(1)=subs(y,k,x); py(2)=subs(yy,k,x); end 2.分别写出各个迭代法的迭代函数代码如下: 二分法: function y=dichotomie(a,b,e) i=2; m(1)=a; while abs(a-b)>e t=(a+b)/2; s1=f(a); s2=f(b); s3=f(t); if s1(1)*s3(1)<=0 b=t; else a=t; end m(i)=t; i=i+1; end y=[t,i+1,m]; end 牛顿迭代法: function y=NewtonIterative(x,e) i=2; en=2*e;m(1)=x; while abs(en)>=e s=f(x); t=x-s(1)/s(2); en=t-x; x=t; m(i)=t; i=i+1; end y=[x,i+1,m]; end 牛顿割线法: function y=Secant(x1,x2,e) i=3; m(1)=x1,m(2)=x2; while abs(x2-x1)>=e s1=f(x1); s2=f(x2); t=x2-(x2-x1)*s2(1)/(s2(1)-s1( 1)); x1=x2; x2=t; m(i)=t; i=i+1; end

数值计算(二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法))

本科生实验报告 实验课程数值计算方法 学院名称信息科学与技术学院 专业名称计算机科学与技术 学生姓名 学生学号 指导教师 实验地点 实验成绩 二〇一六年五月二〇一六年五月

实验一非线性方程求根 1.1问题描述 实验目的:掌握非线性方程求根的基本步骤及方法,。 实验内容:试分别用二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法),求x5-3x3+x-1= 0 在区间 [-8,8]上的全部实根,误差限为10-6。 要求:讨论求解的全过程,对所用算法的局部收敛性,优缺点等作分析及比较, 第2章算法思想 2.1二分法 思想:在函数的单调有根区间内,将有根区间不断的二分,寻找方程的解。 步骤: 1.取中点mid=(x0+x1)/2 2.若f(mid)=0,则mid为方程的根,否则比较与两端的符号,若与 f(x0) 异号,则根在[x0,mid]之间,否则在[mid,x1]之间。 3并重复上述步骤,直达达到精度要求,则mid为方程的近似解。

2.2 简单迭代法 思想:迭代法是一种逐次逼近的方法,它是固定公式反复校正跟的近似值,使之逐步精确,最后得到精度要求的结果。 步骤:1.构造迭代公式f(x),迭代公式必须是收敛的。 2.计算x1,x1=f(x0). 3.判断|x1-x0|是否满足精度要求,如不满足则重复上述步骤。 4.输出x1,即为方程的近似解。

开始 输入x0,e X1=f(x0)|x1-x0|

迭代器模式

迭代器模式(Iterator Pattern) 动机(Motivate): 在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“ 同一种算法在多种集合对象上进行操作”提供了可能。 使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方法。 意图(Intent): 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。 -------《设计模式》GOF 结构图(Struct): 适用性: 1.访问一个聚合对象的内容而无需暴露它的内部表示。 2.支持对聚合对象的多种遍历。 3.为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。 生活中的例子: 迭代器提供一种方法顺序访问一个集合对象中各个元素,而又不需要暴露该对象的内部表示。在早期的电视机中,一个拨盘用来改变频道。当改变频道时,需要手工转动拨盘移过每一个频道,而不论这个频道是否有信号。现在的电视机,使用[后一个]和[前一个]按钮。当按下[后一个]按钮时,将切换到下一个预置的频道。想象一下在陌生的城市中的旅店中看电视。当改变频道时,重要的不是几频道,而是节目内容。如果对一个频道的节目不感兴趣,那么可以换下一

个频道,而不需要知道它是几频道。 代码实现: 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。下面看一个简单的示意性例子,类结构图如下: 首先有一个抽象的聚集,所谓的聚集就是就是数据的集合,可以循环去访问它。它只有一个方法GetIterator()让子类去实现,用来获得一个迭代器对象。

牛顿插值法试验报告

. 牛顿插值法一、实验目的:学会牛顿插值法,并应用算法于实际问题。 x?x)f(二、实验内容:给定函数,已知: 4832401.2)?.?1449138f(2.f.f(20)?1.414214(2.1) 549193.)?1f(2.4516575(f2.3)?1. 三、实验要求:以此作为函数2.15插值多项式在处的值,用牛顿插值法求4 次Newton( 1)2.15?N(2.15)。在MATLAB中用内部函数ezplot绘制出的近似值4次Newton插值多项式的函数图形。 (2)在MATLAB中用内部函数ezplot可直接绘制出以上函数的图形,并与作出的4次Newton插值多项式的图形进行比较。 四、实验过程: 1、编写主函数。打开Editor编辑器,输入Newton插值法主程序语句: function [y,L]=newdscg(X,Y,x) n=length(X); z=x; A=zeros(n,n);A(:,1)=Y';s=0.0; p=1.0; for j=2:n for i=j:n A(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1)); end end C=A(n,n); for k=(n-1):-1:1 C=conv(C,poly(X(k))); d=length(C);C(d)=C(d)+A(k,k); end y(k)= polyval(C, z); L(k,:)=poly2sym(C); 0 / 3 . %%%%%%%%%%%%%%%%%% t=[2,2.1,2.2,2.3,2.4]; fx=sqrt(t); wucha=fx-Y; 以文件名newdscg.m保存。 2、运行程序。 (1)在MATLAB命令窗口输入: >> X=[2,2.1,2.2,2.3,2.4]; Y =[1.414214,1.449138,1.483240,1.516575,1.549193]; x=2.15;[y,P]=newdscg(X,Y,x) 回车得到:

用牛顿迭代法求解非线性方程

数值分析实验报告(一) 实验 名称 用牛顿迭代法求解非线性方程实验时间2011年11 月19日姓名班级学号成绩 一、实验目的 1.了解求解非线性方程的解的常见方法。 2.编写牛顿迭代法程序求解非线性方程。 二、实验内容 分别用初值 0.01 x=, 10 x=和 300 x=求113,要求精度为5 10-。 三、实验原理 设113 x=,则21130 x-=,记f(x)= 2113 x-,问题便成为了求2x -113=0的正根; 用牛顿迭代公式得 2 1 113 2 k k k k x x x x + - =-,即 1 1113 () 2 k k k x x x + =+(其中k=0,1,2,3,…,) 简单推导 假设f(x)是关于X的函数: 求出f(x)的一阶导,即斜率: 简化等式得到: 然后利用得到的最终式进行迭代运算直至求到一个比较精确的满意值。 如果f函数在闭区间[a,b]内连续,必存在一点x使得f(x) = c,c是函数f在闭区间[a,b]内的一点 我们先猜测一X初始值,然后代入初始值,通过迭代运算不断推进,逐步靠近精确值,直到得到我们主观认为比较满意的值为止。 回到我们最开始的那个”莫名其妙”的公式,我们要求的是N的平方根,令x2 = n,假设一关

于X的函数f(x)为: f(X) = X2 - n 求f(X)的一阶导为: f'(X) = 2X 代入前面求到的最终式中: X k+1 = X k - (X k 2 - n)/2X k 化简即得到我们最初提到求平方根的迭代公式: 四、实验步骤 1.根据实验题目,给出题目的C程序。 当初值为0.01、10、300时,即x=0.01,10,300 分别应用程序: #include "stdio.h" int main() { float number; printf("Please input the number:"); scanf("%f", &number); float x=1; int i; for (i=0;i<1000;i++) { x = (x + number/x)/2; } printf("The square root of %f is %8.5f\n", number ,x); } 得出结果 2.上机输入和调试自己所编的程序。 当x=0.01时,结果为:10.63015 x=10时,结果为:10.63015 x=300时,结果也为:10.63015 3.实验结果分析。 当初值取0.01、10、300时取不同的初值得到同样的结果10.63015。 五、程序

几种常用的设计模式介绍

几种常用的设计模式介绍 1. 设计模式的起源 最早提出“设计模式”概念的是建筑设计大师亚力山大Alexander。在1970年他的《建筑的永恒之道》里描述了投计模式的发现,因为它已经存在了千百年之久,而现代才被通过大量的研究而被发现。 在《建筑的永恒之道》里这样描述:模式是一条由三个部分组成的通用规则:它表示了一个特定环境、一类问题和一个解决方案之间的关系。每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。 在他的另一本书《建筑模式语言》中提到了现在已经定义了253种模式。比如: 说明城市主要的结构:亚文化区的镶嵌、分散的工作点、城市的魅力、地方交通区 住宅团组:户型混合、公共性的程度、住宅团组、联排式住宅、丘状住宅、老人天地室内环境和室外环境、阴和阳总是一气呵成 针对住宅:夫妻的领域、儿童的领域、朝东的卧室、农家的厨房、私家的沿街露台、个人居室、起居空间的序列、多床卧室、浴室、大储藏室 针对办公室、车间和公共建筑物:灵活办公空间、共同进餐、共同小组、宾至如归、等候场所、小会议室、半私密办公室 尽管亚力山大的著作是针对建筑领域的,但他的观点实际上适用于所有的工程设计领域,其中也包括软件设计领域。“软件设计模式”,这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。目前主要有23种。 2. 软件设计模式的分类 2.1. 创建型 创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。创建型模式主要有简单工厂模式(并不是23种设计模式之一)、工厂方法、抽象工厂模式、单例模式、生成器模式和原型模式。 2.2. 结构型 用于帮助将多个对象组织成更大的结构。结构型模式主要有适配器模式、桥接模式、组合器模式、装饰器模式、门面模式、亨元模式和代理模式。 2.3. 行为型 用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。行为型模式主要有命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式和访问者模式。

数值分析实验报告-插值、三次样条(教育教学)

实验报告:牛顿差值多项式&三次样条 问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数2 1()25f x x 作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。 实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。应用所编程序解决实际算例。 实验要求: 1. 认真分析问题,深刻理解相关理论知识并能熟练应用; 2. 编写相关程序并进行实验; 3. 调试程序,得到最终结果; 4. 分析解释实验结果; 5. 按照要求完成实验报告。 实验原理: 详见《数值分析 第5版》第二章相关内容。 实验内容: (1)牛顿插值多项式 1.1 当n=10时: 在Matlab 下编写代码完成计算和画图。结果如下: 代码: clear all clc x1=-1:0.2:1; y1=1./(1+25.*x1.^2); n=length(x1); f=y1(:); for j=2:n for i=n:-1:j f(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1)); end end syms F x p ; F(1)=1;p(1)=y1(1); for i=2:n F(i)=F(i-1)*(x-x1(i-1)); p(i)=f(i)*F(i);

end syms P P=sum(p); P10=vpa(expand(P),5); x0=-1:0.001:1; y0=subs(P,x,x0); y2=subs(1/(1+25*x^2),x,x0); plot(x0,y0,x0,y2) grid on xlabel('x') ylabel('y') P10即我们所求的牛顿插值多项式,其结果为:P10(x)=-220.94*x^10+494.91*x^8-9.5065e-14*x^7-381.43*x^6-8.504e-14*x^5+123.36*x^4+2.0202e-1 4*x^3-16.855*x^2-6.6594e-16*x+1.0 并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。 Fig.1 牛顿插值多项式(n=10)函数和原函数图形 从图形中我们可以明显的观察出插值函数在两端点处发生了剧烈的波动,产生了极大的误差,即龙格现象,当n=20时,这一现象将更加明显。 1.2 当n=20时: 对n=10的代码进行修改就可以得到n=20时的代码。将“x1=-1:0.2:1;”改为“x1=-1:0.1:1;”即可。运行程序,我们得到n=20时的牛顿插值多项式,结果为:P20(x)= 260188.0*x^20 - 1.0121e6*x^18 + 2.6193e-12*x^17 + 1.6392e6*x^16 + 2.248e-11*x^15 - 1.4429e6*x^14 - 4.6331e-11*x^13 + 757299.0*x^12 + 1.7687e-11*x^11 - 245255.0*x^10 + 2.1019e-11*x^9 + 49318.0*x^8 + 3.5903e-12*x^7 - 6119.2*x^6 - 1.5935e-12*x^5 + 470.85*x^4 + 1.3597e-14*x^3 - 24.143*x^2 - 1.738e-14*x + 1.0 同样的,这里得到了该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.2)。

迭代器与组合模式(含源码)

软件构造第4次实验 实验报告 班级: 学号: 姓名: 2016年4月13日

一.设计 1.本次实验内容是用迭代器与组合模式来管理一个大公司。在迭代 器与组合模式中,迭代器提供一个方式来遍历集合而无需暴露集合的实现(实验中通过printPerson()方法打印公司的全部员工);通过组合,客户可以将对象的集合以及个别的对象一视同仁(实验中通过printMale()方法来打印所有的男工作者)。 2.迭代器将遍历聚合的工作封装进一个对象中,当使用迭代器的时 候,我们依赖聚合提供遍历;迭代器提供了一个通用的接口Iterator,使得我们在遍历聚合的项时可以实现多态。 3.组合模式提供了一个可以同时包容个别对象和组合对象的结构, 允许客户对个别对象以及组合对象一视同仁;在组合结构内的任意对象称为组件,组件可以是组合,也可以是叶节点。

二.实现 https://www.doczj.com/doc/4a4538000.html,pany import java.util.ArrayList; import java.util.Iterator; /** * 对应Menu * @author Yilia * */ public class Company extends Component{ ArrayList components = new ArrayList(); String name; // Iterator iterator = null; public Company(String name){ https://www.doczj.com/doc/4a4538000.html, = name; } public void add(Component menuComponent){ components.add(menuComponent); } public void remove(Component menuComponent){ components.remove(menuComponent); } public Component getChild(int i){ return (Component)components.get(i); } public String getName(){ return name; } public void print(){ for(int i = 0; i < deepth; i++){ System.out.print("---"); } System.out.println(getName()); Iterator iterator = components.iterator(); deepth++;

牛顿环测量曲率半径实验报告

实验名称:牛顿环测量曲率半径实验 1.实验目的: 1 观察等厚干涉现象,理解等厚干涉的原理和特点 2 学习用牛顿环测定透镜曲率半径 3 正确使用读数显微镜,学习用逐差法处理数据 2.实验仪器: 读数显微镜,钠光灯,牛顿环,入射光调节架 3.实验原理 图1 如图所示,在平板玻璃面DCF上放一个曲率半径很大的平凸透镜ACB,C点为接触点,这样在ACB和DCF之间,形成一层厚度不均匀的空气薄膜,单色光从上方垂直入射到透镜上,透过透镜,近似垂直地入射于空气膜。分别从膜的上下表面反射的两条光线来自同一条入射光线,它们满足相干条件并在膜的上表面相遇而产生干涉,干涉后的强度由相遇的两条光线的光程差决定,由图可见,二者的光 程差等于膜厚度e的两倍,即

此外,当光在空气膜的上表面反射时,是从光密媒质射向光疏媒质,反射光不发生相位突变,而在下表面反射时,则会发生相位突变,即在反射点处,反射光的相位与入射光的相位之间相差π,与之对应的光程差为λ/2 ,所以相干的两条光线还具有λ/2的附加光程差,总的光程差为 (1) 当?满足条件 (2) 时,发生相长干涉,出现第K级亮纹,而当 (3) 时,发生相消干涉,出现第k级暗纹。因为同一级条纹对应着相同的膜厚,所以干涉条纹是一组等厚度线。可以想见,干涉条纹是一组以C点为中心的同心圆,这就是所谓的牛顿环。 如图所示,设第k级条纹的半径为,对应的膜厚度为,则 (4) 在实验中,R的大小为几米到十几米,而的数量级为毫米,所以R >> e k, e k 2相对于2Re k 是一个小量,可以忽略,所以上式可以简化为 (5) 如果r k是第k级暗条纹的半径,由式(1)和(3)可得 (6)代入式(5)得透镜曲率半径的计算公式

牛顿迭代法实验报告

用牛顿迭代法求非线性方程的根 一、 实验题目 求方程()013=--=x x x f 在5.1附近的根。 二、 实验引言 (1)实验目的 1. 用牛顿迭代法求解方程的根 2. 了解迭代法的原理 3. 改进和修缮迭代法 (2)实验意义 牛顿迭代法就是众多解非线性方程迭代法中比较普遍的一种,求解方便实用。 三、 算法设计 (1)基本原理 给定初始值0x ,ε为根的容许误差,η为()x f 的容许误差,N 为迭代次数的容许值。 1.如果()0='x f 或迭带次数大于N ,则算法失败,结束;否则执行2. 2.计算()() 0001x f x f x x '-=. 3.若ε<-21x x 或()η<1x f ,则输出1x ,程序结束;否则执行4. 4.令10x x =,转向1. (2)流程图

四、程序设计program nndd01 implicit none real,parameter::e=0.005 real,parameter::n=9 real::x1 real::x0=1.5 integer::k real,external::f,y do k=1,9 if (y(x0)==0) then write(*,*)"失败" else x1=x0-f(x0)/y(x0) if (abs(x1-x0)

else x0=x1 end if end if end do end function f(x) implicit none real::f real::x f=x*x*x-x-1 return end function function y(x) implicit none real::y real::x y=3*x*x-1 return end function 五、求解结果 3 1.324718 4 1.324718 5 1.324718 6 1.324718 7 1.324718 8 1.324718 9 1.324718 六、算法评价及讨论 1.在求解在1.5处附近的根,不难发现在输入区间左端值为1时 需要迭代6次,而输入区间左端值为1.5时,却只要4次。初

《软件设计模式》教学大纲

《软件设计模式》教学大纲 一、课程说明 1、课程编号: 2、课程名称(中/英文):软件设计模式/Software Design Patterns 3、课程类别:专业课/限选 4、学时/学分:32/2.0 5、先修课程:Java面向对象程序设计、软件工程 6、适用专业:软件工程,计算机科学与技术,信息管理与信息系统 7、教材、教学参考书: [1]刘伟.Java设计模式.北京:清华大学出版社,2018. [2]刘伟.设计模式实验及习题解析.北京:清华大学出版社,2018. [3]ErichGamma,RichardHelm,RalphJohnson,JohnVlissides.DesignPatte rns:ElementsofReusableObject-OrientedSoftware.Addison-Wesley,199 5. [4]结城浩.图解设计模式.北京:人民邮电出版社,2016. [5]秦小波.设计模式之禅(第2版).北京:机械工业出版社,2014. [6]陈臣,王斌.研磨设计模式.北京:清华大学出版社,2010. 二、课程性质和教学目的 《软件设计模式》是软件工程、计算机科学与技术、信息管理与信息系统等专业本科生的一门专业课,本课程是一门具有较强理论性和实践性的软件设计和开发类课程。 本课程主要学习软件设计模式基础知识、UML类图、面向对象设计原则、常用的创建型设计模式、结构型设计模式和行为型设计模式。本课程要求学生掌握常用软件设计模式的动机、定义、结构、实现、使用效果以及应用实例,能够将所学知识应用到实际软件项目设计与开发中,进一步培养学生的工程实践能力和专业技术水平,为今后从事相关工作奠定基础。 本课程首先学习软件设计模式的基本知识和UML类图;接着介绍常见的七个面向对象设计原则;然后重点介绍使用频率较高的软件设计模式,包括五种创建型设计模式(简单工厂模式、工厂方法模式、抽象工厂模式、原型模式、单例模式)、六种结构型设计模式(适配器模式、桥接模式、组合模式、装饰模式、外观模式、代理模式)和七种行为型设计模式(职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式、模板方法模式)。此外,为了帮助学生深入理解所学知识,提高实践动手能力并将所学知识应用于解决实际问题,本课程设置了相应的实践环节,针对具体问题合理选择设计模式,绘制相应的模式结构图并使用代码实现

相关主题
文本预览
相关文档 最新文档