电磁场与电磁波测量实验
实验报告
学院:电子工程学院 班级:2011211204
指导老师:李莉
20##年3月
实验二 单缝衍射实验
一、实验目的
掌握电磁波的单缝衍射时衍射角对衍射波强度的影响
二、预习内容
电磁波单缝衍射现象
三、实验设备
S426型分光仪
四、实验原理
图1 单缝衍射原理
当一平面波入射到一宽度和波长可比拟的狭缝时,就要发生衍射的现象。在缝后面出现的衍射波强度并不是均匀的,中央最强,同时也最宽。在中央的两侧衍射波强度迅速减小,直至出现衍射波强度的最小值,即一级极小,此时衍射角为其中是波长,是狭缝宽度。两者取同一长度单位,然后,随着衍射角增大,衍射波强度又逐渐增大,直至出现一级极大值,角度为:(如图所示)
图2 单缝衍射实验仪器的布置
仪器连接时,预先接需要调整单缝衍射板的缝宽,当该板放到支座上时,应使狭缝平面与支座下面的小圆盘上的某一对刻线一致,此刻线应与工作平台上的90刻度的一对线一致。转动小平台使固定臂的指针在小平台的180处,此时小平台的0就是狭缝平面的法线方向。这时调整信号电平使表头指示接近满度。然后从衍射角0开始,在单缝的两侧使衍射角每改变10,读取一次表头读数,并记录下来,这时就可画出单缝衍射强度与衍射角的关系曲线,并根据微波波长和缝宽算出一级极小和一级极大的衍射角,并与实验曲线上求得的一级极小和极大的衍射角进行比较。
五、实验报告
记录实验测得数据,画出单缝衍射强度与衍射角的关系曲线,根据微波波长和缝宽算出一级极小和一级极大的衍射角,与实验曲线上求得的一级极小和极大的衍射角进行比较。
(1)单缝衍射实验=70mm,=32mm
(a)整理以上数据表格,标注一级极大、一级极小对应的角度值;
由表格数据可以看出,一级极大对应的角度值为48度,一级极小对应的角度值为32度。
(b)画出衍射曲线;
(c)根据公式算出一级极大和一级极小的衍射角,和实验曲线求得的极大、极小对应的衍射角进行比较。
误差分析:
一级极大的衍射角为:度
一级极小的衍射角为:度
可以看出测量值与理论值有一定的差距,但是差距在误差范围之内。
(2)单缝衍射实验=50mm,=32mm
(a)整理以上数据表格,标注一级极大、一级极小对应的角度值;
由表格数据可以看出,一级极大对应的角度值为48度,一级极小对应的角度值为44度。
(b)画出衍射曲线;
(c)根据公式算出一级极大和一级极小的衍射角,和实验曲线求得的极大、极小对应的衍射角进行比较。
误差分析:
一级极大的衍射角为:度
一级极小的衍射角为:度
可以看出测量值与理论值存在较大差距,特别是一级极大值,原因在于理论上一级极大的衍射角约为74度,已经超出了实验所能测量的范围,一级极小的衍射角也存在不小的误差,原因在于仪器产生的系统误差无法避免,其次在测量的时候产生的随机误差,最后在实验室中由于大家实验电磁波辐射相互干扰也造成较大误差。
(3)单缝衍射实验=20mm,=32mm
(a)整理以上数据表格,标注一级极大、一级极小对应的角度值;
由表格数据可以看出,一级极大对应的角度值为46度,一级极小对应的角度值为40度。
(b)画出衍射曲线;
(c)根据公式算出一级极大和一级极小的衍射角,和实验曲线求得的极大、极小对应的衍射角进行比较。
分析:
由于第三组实验所用的比小,所以不能用公式来计算准确的一级极大和一级极小角度。
五、实验总结
本次实验我们学会了如何利用不同的衍射角来测量衍射波强度。在实验中,我对衍射这一物理现象都有了更加深刻的认识。其次还有对误差的认识,知道了无论多么精密的实验总会有误差的存在,误差只可减小不可消灭。相信这次单逢实验对下次的双逢衍射实验会有很大的帮助。
第二篇:北邮程序设计实验报告
程序设计实践
设计报告
课题名称: 邮件客户端
学生姓名:
班 级: 2
班内序号: 16
学 号: 2
日 期: 2014.6.4
1. 课题概述
1.1课题目标和主要内容
本课题主要通过MFC的方式,利用SOCKET以及SMTP相关知识,来实现邮件(可携带附件)的定向发送,借此来复习和巩固C++编程的基本思想;学习SOCKET以及SMTP的相关知识,了解复杂网络应用程序的设计方法,并独立完成一个网络应用。
1.2系统的主要功能
1. 邮件的发送(不携带附件)
2. 邮件的发送(携带附件)
3. 邮件接收
2. 系统设计
2.1 系统总体框架
程序的功能由MyEmailClientDlg.cpp, SMTP.cpp, MailMessage.cpp, Base64.cpp, MIMECode.cpp, MIMEContentAgent.cpp, MIMEMessage.cpp, AppOctetStream.cpp, MyEmailClient.cpp, StdAfx.cpp, TextPlain.cpp来实现。其中MIMECode.cpp, MIMEContentAgent.cpp, MIMEMessage.cpp, AppOctetStream.cpp, TextPlain.cpp来对MIME协议进行封装,Base64.cpp来对Base64编码进行封装,SMTP.cpp是对SMTP协议进行封装,MailMessage.cpp是利用MIME协议对邮件内容的一个处理,最终通过MyEmailClientDlg.cpp来实现邮件的发送的功能。
2.2 系统详细设计
[1] 模块划分图及描述
协议模块:包括网络应用程序中的各种协议,包括STMP协议,MIME协议等。
处理模块:主要实现对数据的进行编码以及解码。
实现模块:主要内容为邮件发送的具体步骤,相关按钮操作。
[2] 类关系图及描述
协议类:CSMTP, CTEXTPlai, CMIMECode, CMIMEContentAgent, CMIMEMessage, CAppOctetStream, CTextPlain.主要为协议中信息处理的中作用
编码类:Base64, MailMessage.主要为对邮件信息的处理
实现类:CAboutDlg,CMyEmailClientApp,CMyEmailClientDlg.主要为MFC的框架构建以及邮件发送的实现。
[3] 程序流程图及描述
[4] 存储结构、内存分配
主要使用字符串数组来进行存储,同时还是用套接字来进行消息传输。
2.3 关键算法分析
算法1:BOOL CSMTP::Connect()
[1] 通过SMTP协议内容的判断对服务器之间的连接状况的判断
[2] 将SMTP的协议工作原理进行细化,分为1.TCP连接。2.客户端发送HELO命令。3.客户端发送AUTH LOGIN命令。4.用户名与密码的验证。分别在每一个步骤后对服务器返回的消息进行分析,判断是否连接正常。
[3] 由于没有其他参量,时间复杂度为O(1)。空间复杂度为O(1)。
[4]1判断套接字是否创建成功。2判断是否连接到服务器。3判断服务器是否响应。4发送HELO命令,同时判断服务器响应是否正确。5发送AUTH LOGIN命令,同时判断服务器响应是否正确。6发送经过Base64编码过后的用户名,同时判断服务器响应是否正确。7发送经过Base64编码过后的密码,同时判断服务器响应是否正确。8一切正常,将变量m_bConnected=TRUE。
算法2:BOOL CSMTP::transmit_message(CMailMessage * msg)
[1] 向服务器发送邮件
[2] 根据SMTP发送邮件的工作原理,将其分为1.发送MAIL命令,告知服务器发件人的邮件地址。2.发送RCPT命令,告知服务器的接收人的邮件地址。3.发送DATA命令。4.发送邮件内容。5.发送结束符,结束此次发送。
[3] 由于FOR循环中包含msg->GetNumRecipients(),所以时间复杂度为O(n)。空间复杂度为O(1)。
[4] 1.判断是否连接服务器正常。2.发送MAIL指令及发件人信息,并判断服务器响应。3.发送RCPT指令及收件人信息,多个收件人必须多次发送,最后判断服务器响应。4. 发送DATA指令,并判断服务器响应。5.发送邮件内容。6.发送结束符,结束此次发送,并判断服务器响应。
算法3:BOOL CSMTP::get_response( UINT response_expected )
[1] 根据服务器的响应来判断是否正常
[2] 首先判断套接字是否接收成功,然后将得到的响应进行分析,判断结果
[3] 时间复杂度为O(1),空间复杂度为O(1)
[4] 1.判断是否接收套接字正常,不正常直接返回FALSE。2.判断接收的套接字是否为预期的,正常直接返回TRUE。3.对接收的服务器响应,进行判断。如果错误,将错误原因赋值给m_sError。
算法4:void CMyEmailClientDlg::OnButtonAddFile()
[1] 附件按钮响应,实现添加附件的功能
[2] 从目录中选择的文件,一个一个显示到附件的列表框中。
[3] 由于和选择的附件数目有关,所以时间复杂度为O(n)。空间复杂度为O(1)。
[4] 1.显示打开文件对话框。2.将选择的文件写入pos变量中。3.将pos中文件路径用字符串的方式显示到列表框中。
算法5:void CMyEmailClientDlg::OnSend()
[1] 发送按钮响应,实现发送邮件的功能
[2] 将填入界面中的信息分别赋予其对应变量,然后按照顺序调用对应的功能函数,实现邮件的发送。
[3] 由于收件人以及附件的数目不确定性,其时间复杂度为O(nm)。空间复杂度为O(1)。
[4] 1.将填入的相应信息分别赋值给CMIMEMessage msg对象。2.根据列表框中的附件字符串数目,然后根据MIME协议进行添加附件。3. 建立CSMTP对象,同时设置m_SMTP的对应属性。4.连接SMTP服务器,并判断是否成功。5.发送邮件,并判断是否成功。6.清空附件框,并断开SMTP服务器的连接。
2.4 其他
直接使用了封装好的MIME协议,大大增强了代码的简洁性。
3. 程序运行结果分析
包括输入数据来源和格式、输出显示方式、主要界面、操作流程、响应时间,运行效果等。
输入数据来源和格式:
1. 键盘输入。直接从键盘输入相应的信息,如用户名,发件人等信息。格式一般为字符串
2. 鼠标输入。利用鼠标从电脑选择附件,进行输入。在列表框中显示的格式为字符串。
输出显示方式:主要为对话框直接显示消息。
主要界面:只包含一个主界面,点击附件按钮后,会弹出打开文件对话框。
操作流程:按照要求输入用户名(选择163或126邮箱,QQ邮箱使用前需要在邮箱中设置),密码。然后输入发送邮件的发件人,收件人,标题,内容,可以选择附件。最后点击发信即可。退出时,可以点击退出。
运行效果:
4. 总结
4.1课题的难点和关键点
本次课题相对上次的课题难度加大不少,特别是要运用MFC进行编程,在之前我只是在控制台上学习编程。
此外,本次课题的难点在于网络应用程序的设计是老师上课时并未仔细说明,主要靠同学自己自学。其中包括SMTP协议,MIME协议,以及Base64编码都是新的知识,虽然这几个文件的代码网上有,但是要自己学会使用。在网络传输中,通过课本明白了套接字的作用及使用,让我对SMTP的协议有了更加深刻的理解。关键点在于使用套接字与服务器进行交互,与服务器之间发送消息,并借此发送消息。根据SMTP协议的工作原理,将每一步都使用套接字进行发送,并进行判断,成功的实现了与服务器之间的交互。
4.2 本课题的评价
对于本次课题,算是这个学期以来碰到的最难得实验。特别是mfc的知识事先没有接触过,不得不通过查阅课外书籍,以及加上百度的力量。
本次课题十分经典,但因为涉及与网络编程,使编程的难度大大增加。不仅考验我们对旧知识的重新运用,也考察了我们对新知识的学习与理解。能够充分培养学生的合作意识,培养学生发现问题,解决问题的能力,充分发挥学生的想象力、创造力,激发学生主动学习的潜能。在程序运行的时,存在很多警告,自己不能够充分解决。主要是由于VS程序的升级,使得以前使用的函数存在危险。但是由于知识水平的有限,在知道了改进的函数之后,仍然没有办法解决这个警告。同时自己对于MIME协议理解的仍然不够深刻,无法彻底剖析以及独立完成。以后,我会更加努力的学习网络知识,争取解决这么问题。
4.3心得体会
本次试验可谓是折磨人,特别是在一大波期末考试来临之前要求完成。可喜的是在查阅资料和借助他人一些代码的情况下,程序总算可以运行出来。 通过这次MFC的编程,让我又学会了一种新的编译办法。相比之下,觉得MFC界面比控制台界面更加人性化。在学习编程过程中,慢慢意识到编程的奥妙,特别是层与层之间的相互关系。如果学会正确处理这些关系,那编程就会简单很多,这个心得也会影响到以后各科的学习,甚至是终生有益。5. 参考文献
[1]徐惠民等,C++高级语言程序设计案例与实践辅导,北京:人民邮电出版社,2012
[2]徐雅静等,数据结构与stl,北京:北京邮电大学,2011
[3]徐惠名等,C++高级语言程序设计,北京,人民邮电出版社,2012