第一篇:CT与MRI图像融合matlab程序及结果
请注意该程序处理的图像必须是灰度图像,不能是彩图。Matlab程序: clear %装载原始图像001.mat;002.mat并显示。[X,map]=imread('003.Tif');X1=X;map1=map;figure(2);X1=imread('003.Tif');subplot(2,2,1);imshow(X1);title('图像001');X2=imread('004.Tif');subplot(2,2,2);imshow(X2);title('图像002');X1=double(X1);X2=double(X2);%X1=uint8(X1);%X2=uint8(X2);%=========== %对上述两图像进行分解
[c1,I1]=wavedec2(X1,3,'sym4');[c2,I2]=wavedec2(X2,3,'sym4');%对分解系数进行融合 c=c1+c2;%=========== %应用融合系数进行图像重构并显示 XX=waverec2(c,I1,'sym4')subplot(2,2,3);%image(uint8(XX));XX=double(XX);image(XX);title('融合图像');Csize1=size(c1);%============ %对图像进行增强处理 for i=1:Csize1(2)c1(i)=1.2*c1(i);end Csize2=size(c2);for j=1:Csize2(2)c2(j)=0.8*c2(j);end %============= %通过减小融合技术以减小图像的亮度 c=0.5*(c1+c2);%============= %对融合系数进行图像重构 XXX=waverec2(c,I2,'sym4');%============= %显示重构结果 subplot(2,2,4);XXX=double(XXX);image(XXX);%image(uint8(XXX));title('融合后增强图像');
图 3.31 CT和MRI图像融合结果图
第二篇:图像选取与融合片段教学设计(范文模版)
《图像的选取与融合》片段教学设计
安海中学
一、教学内容分析:
本节课是闽教版八年级上Photoshop活动四《图像的合成》中第二课时的内容,主要介绍选框工具、套索工具、魔棒工具与自由变换工具等的使用方法,通过这些知识技能的学习,最终让学生学会利用相应的选择工具创建适合的选区,进行图像的选取,并结合图层操作相关知识技能,最终实现图像的合成。
二、教学对象分析
学生在第一课时中,学习了图层的概念以及图层面板的组成,也掌握了图层的建立、删除、移动、合并等操作方法。
本课采用以学生为主体,通过教师演示和课前准备的微课视频引导学生自主学习如何创建选区(即抠图)和合成图像作为知识技能。
三、教学目标
1、知识与技能:
(1)掌握选框工具、套索工具、魔棒工具的使用方法。(2)图形自由变换命令的设置方法。
2、过程与方法: 能根据实际创作的需求,使用相应的选择工具进行抠图,以及利用图层合成图像。
3、情感态度与价值观:
(1)经历创作图像作品的过程,形成积极主动学习和利用图像处理技术,参与图像作品创作的态度,培养学生的创新能力,表达能力。
(2)在师生、生生的互动交流合作中,培养合作意识和合作精神,提高交际能力。
四、教学重点
掌握选框工具(矩形选框、椭圆选框、单行单列选框)、套索工具(磁性套索、多边形套索、手画套索)、魔棒工具进行抠图的方法。
五、教学难点
1、根据实际情况选择应用不同工具进行抠图。
2、选框工具、魔棒工具的操作和属性参数设置。
六、教学方法
情景教学法、讲练结合、任务驱动、演示讲解法
七、教学准备
1、多媒体网络教室
2、软件:Windows操作系统、Photoshop
3、资源:PPT课件、微课视频、相关图像素材
八、教学过程:
(一)复习导入,情景体验(4分钟)
1、师:同学们好!上节课我们学习了图层面板的组成以及图层的建立、删除、移动、合并等操作。
2、课件展示(结合PPT)
师:现在请同学们来看大屏幕,一起来欣赏一组图片。在欣赏的过程中请同学们思考:看了图片后你有什么感想?
(设计意图:展示有趣幽默(晋江旅游景点合成图、、本人旅游景点合成图、憨豆先生合成图、华南虎假图)、体育海报、广告艺术(安踏平面广告、环境保护公益广告)等合成图片。激发学生兴趣,转移学生注意力,引入新课。)师:(请学生分享)看了图片后你有什么感想?
生: a.图片让人开怀一笑。b.图片想象力丰富,有穿越的境界。c.很美,吸引人,让人感觉很舒服。d.侵权,欺骗社会和公众。
3、点评:
师:日常生活中,我们经常都能看到类似的拼接照片。师:那它们是怎么制作的呢?(请学生回答)(学生积极响应。)
师:对了,他们都是通过图像合成创作的。师:同学们想不想也来试一试呢?(学生积极响应。)
师:好,今天我们要学习的新技能就是图像的选取和融合。
(设计意图:设置问题情境,让学生感受原有知识技能的不足,激发学生学习知识的欲望和学习兴趣。)
(二)大屏幕课件显示课题:图像的选取与融合(10分钟)
师:图像合成就在我们身边,它是依靠想象力和技术的翅膀,让不可能的事情发生!它们都是通过不同的图像各取一部分结合在一起,从而创造出一个新的图像。
1、阅读教材,归纳总结:
师:现在请同学们两分钟时间阅读教材P43-45,思考:图像合成的步骤(请学生回答: …………)师:(描述和板书)
a、(生:打开图片选中图像区域)创建选区——抠图 b、(生:把图像搬到另一张图像里)移动复制图像到目标文件 c、(生:图像大小、位置调整)合理编辑、修饰图像
2、教师边演示边讲解选区工具。(通过电脑演示操作,学生观看)
师:选区即选中的部分,是由一些闭合的虚线环绕而成,类似于蚂蚁行军,又叫做蚁行选区。创建选区可以用ps工具面板中的选框工具(包括矩形选框、椭圆选框、单行选框、单列选框)、魔棒工具、套索工具(磁性套索、多边形套索、手画套索)等。
3、布置任务,上机实践
师:现在请同学们观看老师下发到你们电脑桌面的《图像的选取与融合》文件夹下的《微课1》视频进行学习,并用发下去的图片素材完成教材P44~46“将卡通人物合成到风景照中”的任务。同桌或前后桌同学之间可以进行小组讨论,也可以举手跟老师提问。
(设计意图:学生自主学习并上机实践,完成任务,掌握魔棒工具和选框工具创建选区的使用方法。)
4、师巡视全班,个别辅导,对知识的操作适当讲解。师:(通过大屏幕课件展示一下几点操作注意事项,并讲解。)a、使用魔棒工具时的面板属性设置:
容差值设置:容差值大小表示颜色相近程度,数值越小,对颜色精度要求越高,选择范围也就越小。
“连续的”属性:勾选时表示在图像中只能选择与鼠标落点处相连的部分,不勾选时,则选中所有与鼠标落点处颜色相近的部分。
选区的反选:通过“选择”菜单,选择“反选”命令。
b、选框工具操作:(按住Alt键拖动鼠标可以画椭圆或矩形,按住Shift键拖动鼠标可以画圆或正方形)柔化选区设置:
方法
1、可以使用属性面板中“消除锯齿”设置。
方法
2、可以使用属性面板“羽化”。
d、图片的移动复制操作:选择移动图像,通过“编辑”菜单,选择“拷贝”命令;选择目标图像,选择“编辑”菜单,选择“粘帖”命令。
e、图像大小、位置修饰: 选中图像所在的图层,选择“编辑”菜单,选择“变换”—“自由变换”命令。(设计意图:对知识的操作讲解适可而止,留给学生操作的空间,并及时了解学习情况,根据实际情况进行讲解。)
5、点评归纳
师:大多数同学都能较好的完成本次任务,个别同学创建选区技术还有点生疏,操作较慢,稍后继续加强练习。
师:要懂得魔棒工具和选框工具适用范围。a、魔棒工具适用范围:
适用于选择的部分颜色较纯(单色,或者几种纯的单色)如果底色杂乱,基本不考虑魔棒工具。
b、选框工具适用范围:
适用于规则选区(椭圆、圆与矩形、正方形等选区)。
(三)布置任务,巩固提高:用现有的照片进行美化创作(略)
九、教后反思:
1、导入新课时创设的情境能否使学生意识到原来知识经验的不足,激发学习新知识的兴趣。
2、学生自学或操作有困难时,教师是否做到进一步的讲解。
3、通过本活动的学习,是否达成了既定的教学目标,学生能否懂得应用选择工具创建合适的选区进行图像的选取,使用图层进行图像的合成。
第三篇:检测结果解释与报告程序
检测结果解释与报告
4.1.2 本检测中心的检测报告应能够准确、清晰、明确和客观地报每一项或每一系列的检测结果,并符合检测方法中规定的要求。检测报告的标准格式应由检测室负责人根据承检产品项目标准的要求设计。其内容应包括以下部分,并应尽量减少产生误解或误用的可能性; 4.1.2.1 标题:检测报告;
4.1.2.2 检测中心名称:淄川区城南卫生院 4.1.2.3 唯一性标识:
报告封面及正文上编制编号,有多页时,正文每页编制“”页码,检测报告结束加注结束标识,以便确保识别报告唯一性和完整性;
4.1.2.4 客户的名称和地址:标明受检单位或委托方名称和地址; 4.1.2.5 所用方法的标识:给出检测所依据的标准名称或代号; 4.1.2.6 检测物品的描述、状态和明确的标识;填写样品名称、型号规格、样品 编号和状态等;
.对结果的有效性和应用至关重要的检测物品的接收日期和进行检测的日 期;应有抽样日期或委托日期、检测日期、签发日期;
.如与结果的有效性和应用相关时,检测中心或其他机构所用的抽样计划
和程序的说明;
.检测结果:应按检测方法的要求给出检测结果,并带有法定计量单位; .检测报告上应有批准人的姓名、职务、签字或等同的标识和日期,并同 时有编制人,审核人的签字;
报告中注明检测结果仅对样品或批次有效;
当有分包项时,则应注明清晰地标明分包方出具的数据; 检测报告的声明。4.1.3 当需要对检测结果做出解释时,检测报告中还应包括下列内容:
对检测方法的偏离、增添或删节,以及特殊检测条件的信息,如环境条
件;
根据检测方法中规定的技术要求在报告中给出符合
不符合结论或检测
结果;
.当不确定度与检测结果的有效性或应用有关,或客户要求,或当不确定
度影响到对规范限度的符合性时,检测报告中还需包括有关不确定度的信息;
.适用且需要时,提出意见和解释;
.特定方法、客户或客户群体要求的附加信息。
4.1.4 当需对检测结果做出解释对,对含抽样结果在内的检测报告,除了4.1.2 和4.1.3 所列的要求之外,还应包括下列内容: .抽样日期及抽样人;
.抽取的物质、材料或产品的清晰标识(适用时,包括抽样产品名称、制
造者的名称、标示的型号或类型规格和相应的系列号、批量、样本数量、检测标
记等); c .抽样地点,包括任何简图、草图或照片;
.所用抽样计划和程序的说明;
.抽样过程中可能影响检测结果解释的环境条件的详细信息,可附详细说
明;
说明与抽样方法或程序有关的标准或规范,以及对这些规范的偏离、增 添或删节的说明。4.1.5 意见和解释 4.1.5.1 如包括对专业性评价和说明时,本检测中心应把做出的评价和说明的依据制订成书面文件。评价和说明应与检测报告的检测结论明确分开,被清晰地标注。4.1.5.2 检测报告中的“意见和解释”可以包括但不限于以下内容:
关于结果符合或不符合要求的声明意见;
满足合格要求的意见; 如何使用结果的建议; 怎样用于改进的指导意见。4.1.5.3 许多情况下,如果能与客户直接对话来传达 “意见和解释” 可能会更恰
当,但这些对话需做文字记录。4.1.6 设计后的检测报告格式应由技术负责人审批使用。4.2 报告的编制 4.2.1 样品检测结束后,检测项目负责人对由检测人员签字并评审无误的检测原
始记录和分包检测报告(如果有分包)进行校核,并详细记录校核评定结果,报 告编制人根据校核后的检测原始记录按照承检产品 项目的标准格式(当客户有 要求时,则报告格式应满足客户的要求)
打印编写检测报告,编写结束时在检测报告“编制”处署名并签上日期。4.2.2 如有分包的试验检测项目,则应在检测报告中注明。分包应以书面方式报告结果。
4.2.3 打印后的检测报告(数量根据委托要求和检测中心留存)同检测原始记录及有关资料项目负责人送交检测室负责人审核签字。4.3 检测报告的审核 4.3.1 检测室负责人对检测报告及有关资料进行审核。4.3.2 对审核中发现的问题在检测报告审批记录表中详细记录审核评定意见。4.3.3 报告编制人对检测报告审核过程中发现的错误及时进行更正后,重新将检测报告送交检测室负责人审核。检测室负责人确认后在上报的检测报告“审核”处署名并签上日期。4.4 检测报告的批准 4.4.1 经检测室负责人审核无误的检测报告同原始记录,由检测室负责人转至授权签字人批准签发。
授权签字人对审核后的检测报告质量进行评定,并在检测报告审批记录表上作好记录。4.4.2 报批报告中出现的非结论性错误,应将报告交办公室退回检测室重新修改、编制报批。
4.4.3 授权签字人在检测报告上“批准”处署名并签上日期。经授权签字人批准签发的检测报告同原始记录,由授权签字人转至业务管理员。
4.5 检测报告的盖章 4.5 业务管理员将签发后的检测报告盖章待发。检测报告的各页应加盖“检测报告骑缝章” 以表示报告各页的相连。留存的报告副本同检测原始记录一并交资料管理员存档保管。4.5.2 签发后的检测报告应盖检测中心的检测报告专用章。4.5.3 经过认可的检测项目,在报告的左上角加盖检测中心认可的标志章。4.5.4 经过认证的检测项目,在报告的左上角加盖“CMA”计量认证专用章。
4.6 对可疑结果的处理 4.6.1 当检测中心怀疑、发现、得知有关于报告数据有误的信息后,技术负责人
应立即从办公室资料管埋员处调阅原检测报告档案,迅速组织有关检测室负责 人、监督员和检测员对报告中的可疑数据或遗漏部分进行核查; 4.6.2 在核查中对已发报告的数据和结论产生怀疑或发现问题时,技术负责人应立即起草一份书面文件通过客户通知所有检测报告的持有人,要求检测报告持有人暂停使用编号为“XXX”的检测报告,并声明:待查实报告的数据和结论后再以书面文件告之。
4.6.3 通知发出的同时,检测室负责人应按照《数据转换及处理程序》认真组织实施检测数据的核查,并根据与客户签立的检测执行标准核查检测遗漏项目。4.6.4 检测室负责人应在核查结束时,应起草一份核查报告,指出存在的问题提出修改或补充检测报告的处理意见。4.6.5 如需要补充检测,则检测室负责人提出补充检测的可行方案报技术负责人审批。
4.6.6 批准后的补充检测方案,由检测室负责人组织实施并出具补充检测原始记录。
4.6.7 检测室负责人根据补充检测原始记录和核查结果,按照本程序第4.7条的要求起草一份“检测报告的修改补充通知书”。4.6.8 检测室负责人起草的“检测报告的修改补充通知书”应由技术负责人审核。4.6.9 技术负责人应对检测室负责人转来的“检测报告的修改/补充通知书”的修改或补充内容以及发生检测问题的追溯情况进行分析核对。经核对无误后转至授权签字人批准签发。4.6.10 经授权签字人签发后的“检测报告的修改/补充通知书”由办公室盖章待发。
4.6.11 如“检测报告的修改/补充通知书”中涉及检测数据和结论时,讨“检测报告的修改 补充通知书”的盖章应执行本程序第4.5.2 ~4.5.5的规定。4.6.12 “检测报告的修改补充通知书”的发放应执行本程序。
“检测报告的修改/补充通知书”应发送到所有原检测报告的持有人。
4.7 对已发检测报告的修改/补充
4.7.1 发出的检测报告如需做重大更改或补充时,应由检测室或办公室起草“对xxx 号检测报告的更改或补充说明”的文件。
4.7.2 对已发检测报告的修改/补充文件的内容a.修改/补充文件的标题,如:检测报告的修改/补充通知书; b.检测中心名称、地址;当在检测中心以外检测标明其他点; c.通知书的唯一编号标识和每页及总页数的标识;e.委托方的名称和地址;f.检测物品(对象)的名称和特征;g.检测日期;h.检测执行标准或方法;i.原报告的编号;j.原报告的修改之处;k.修改前和修改后的对照;l.更改原因的说明;m.关于本“检测报告的修改/补充通知书”的使用和发放范围的声明;
n.修改/补充通知的编制人、审核人和签发人的签字;o.修改/补充通知的签发日期。4.7.3 对已发检测报告的修改/补充文件须按检测报告审批程序进行审批,并由办公室按原发放范围逐一登记发送。
4.7.4 检测中心留存的“检测报告的修改/补充通知书”应由办公室资料管理员同原检测报告一并存档保管。4.8 检测报告的归档
4.8.1 留存的检测报告副本应连同检测委托(合同)书、抽样单、原始记录、检测报告审批记录表、客户修改检测方案的书面请求、以及分包检测和批准的例外允许偏决等有关的文件一并归档保存,保存期至少3 年以上,如有条件应长期保存。
4.8.2 档案的管理应执行《记录控制程序》。4.9 检测报告的发送程序和方式 4.9.1 办公室业务管理员应将待发的检测报告根据客户要求的寄达地址和要求时间(无时间要求的,在报告批准后的10日内)用挂号信函寄出,检测报告副本按约定范围发放。4.9.2 当客户提出保密要求,则通过机要部门进行交换或通过邮局按照保密挂号邮寄。
4.9.3 如客户提出通过传真或电子邮件发送报告,则检测中心受理经办人应详细询问客户的姓名、电话、传真号码(电子信箱)、收件人姓名,并认真仔细地核对委托检测合同中的记录内容。4.9.4 当客户提出索要检测报告的磁盘文外时,检测报告的磁盘文件不具有法律效力,其结果仅供参考。4.9.5 办公室发送报告的经办人应如实填写发送报告的有关信息,报告发送登记表应包含以下内容:a.发送报告的编号;b.报告发送的数量; c.报告收件人的详细地址、邮政编码、收件人(领件人)姓名;d.发送(领取日期)和挂号号码; e.接收电子信箱(如客户要求);f.接收传真号码(如客户要求);g.磁盘拷贝数量及编号(如客户要求);h.经办人签字。4.10 发送检测报告的保密要求
4.10.1 有保密要求的文外应通过机要部门进行交换.或通过邮局按照保密文件邮寄。4.10.2 检测中心的任何人员在未经批准的前提下,不准发布、公布、评价检测结果,也不准通过任何通讯方式向任何人透露任何检测数据和结果。4.10.3 除非客户要求,本检测中心禁止使用图文传真和电子网络(如电话、电传、传真或其他电子 电磁方式)发布传送检测报告。4.10.4 通过委托代理人领取的检测报告,应凭有效的委托检测合同文本,并签字领取。4.10.5 发送检测报告的保密要求应同时遵守《保密控制程序》。
第四篇:matlab小波变换函数的总结与程序
小波去噪举例
MATLAB中用wnoise函数测试去噪算法
sqrt_snr=3;init=231434;
[x,xn]=wnoise(3,11,sqrt_snr,init);% 加噪,信噪比为3 subplot(3,2,1),plot(x)
title('original test function')subplot(3,2,2),plot(xn)title('noised function')lev=5;
xd=wden(x,'heursure','s','one',lev,'sym8');%利用小波对一维信号进行降噪, XD为降噪后的%信号,CXD,LXD为XD的小波分解结构 % 's' or 'h'决定阈值的使用方式,SCAL决定阈值是%否随噪声变化:'one' 不调整,'sln'对第一层系%数的层噪声分别进行估计和调整; 'mln'对各层%系数的层噪声分别进行估计和调整;
subplot(3,2,3),plot(xd)
title('One de-noised function')xd=wden(x,'heursure','s','sln',lev,'sym8');subplot(3,2,4),plot(xd)
title('Sln de-noised function')xd=wden(x,'sqtwolog','s','sln',lev,'sym8');% 固定阈值选择算法去噪 subplot(3,2,5),plot(xd)
title('Sqtwolog de-noised function')
[c,l]=wavedec(x,lev,'sym8');subplot(3,2,6),plot(xd)
title('CL de-noised function')
MATLAB中图像噪声处理举例
load sinsin;
colormap('default');subplot(1,3,1),image(X);title('original image');axis('square');init=231434;
randn('seed',init);
X=X+18*randn(size(X));%产生噪声信号 subplot(1,3,2),image(x);title('noised image');axis('square');[thr,sorh,keepapp]=ddencmp('den','wv',x);%自动生成小波去躁或压缩的阈值选择方案,也 %就是寻找默认值
[xc,cxc,lxc,perf0,perfl2]=wdencmp('gbl',x,'sym4',2,thr,sorh,keepapp);%使用全局阈值进行
%图象降噪
subplot(1,3,3),image(xc);title('denoised image');axis('square')
可见,含躁图像的噪声含量很强,利用小波去躁,可以有效去除躁声,同时保留了边界。Wdencmp函数
[xc,cxc,lxc,perf0,perfl2]=wdencmp('gbl',x,'sym4',2,thr,sorh,keepapp)是使用小波进行一维或二维小波压缩或降噪的函数。前面的语句是对于输入的一维或二维信号X,使用全局正阈值THR,由小波系数阈值得到降噪或压缩后的信号XC。附加的输出变量[cxc,lxc]是XC的小波分解结构; [perf0,perfl2]是恢复和压缩的L2范数百分比。使用小波'sym4'执行小波分解到第N=2层。Sorh是软阈值或硬阈值。若keepapp=1,低频系数不能进行阈值处理。
第五篇:201109公选课教案第三讲 MATLAB的程序与图形(一)
第三讲 matlab的程序与图形一
提要
程序结构:顺序结构,选择结构,循环结构 M文件 二维图形
MATLAB作为一种高级语言,它不仅可以如前几节所介绍的那样,以一种人机交互式的命令行的方式工作,还可以像BASIC、FORTRAN、C等其他高级计算机语言一样进行控制流的程序设计,即编制一种以.m为扩展名的MATLAB程序(简称M文件)。而且,由于MATLAB本身的一些特点,M文件的编制同上述几种高级语言比较起来,有许多无法比拟的优点。
6.1M文件
所谓M文件就是由MATLAB语言编写的可在MATLAB语言环境下运行程序源代码文件。由于商用的MATLAB软件是用C语言编写而成。因此,M文件的语法与C语言十分相似。对广大参加建模竞赛且学过C语言的同学来说,M文件的编写是相当容易的。M文件可以分为脚本文件(Script)和函数文件(Function)两种。M文件不仅可以在MATLAB的程序编辑器中编写,也可以在其他的文本编辑器中编写,并以“m”为扩展名加以存储。
6.1.1 脚本文件
脚本类似于DOS下的批处理文件,不需要在其中输入参数,也不需要给出输出变量来接受处理结果,脚本仅是若干命令或函数的集合,用于执行特定的功能。脚本的操作对象为MATLAB工作空间内的变量,并且在脚本执行结束后,脚本中对变量的一切操作均会被保留。在MATLAB语言中也可以在脚本内部定义变量,并且该变量将会自动地被加入到当前的MATLAB工作空间中,并可以为其他的脚本或函数引用,直到MATLAB被关闭或采用一定的命令将其删除。例如:
%命令窗口中定义矩阵a,b a=pascal(3)a= 1
1
1
b=magic(3)b=
% 在编辑器中编写下述命令
a=a+b
b=a-b
a=a-b 在编辑器中编辑完上例的脚本文件后,保存至文件scripts—example中,然后在工作窗口中调用该脚本文件,scripts—example
>> a
a= 8 3 4 >> b b= 其中矩阵a、b均是在工作空间中已定义完毕的,脚本运行时直接使用该变量,并对其进行操作,然后在命令窗口中调用该脚本,可以看到变量a、b已经进行了相互交换。
6.1.2 函数文件
MATLAB语言中,相对于脚本文件而言,函数文件是较为复杂的。函数需要给定输入参数,并能够对输入变量进行若干操作,实现特定的功能,最后给出一定的输出结果或图形等,其操作对象为函数的输入变量和函数内的局部变量等。MATLAB语言的函数文件包含如下5个部分。
(1)函数题头:指函数的定义行,是函数语句的第一行,在该行中将定义函数名、输入变量列表及输出变量列表等。
(2)HI行:指函数帮助文本的第一行,为该函数文件的帮助主题,当使用lookfor命令时,可以查看到该行信息。
(3)帮助信息:这部分提供了函数的完整的帮助信息,包括HI之后至第一个可执行行或空行为止的所有注释语句,通过MATLAB语言的帮助系统查看函数的帮助信息时,将显示该部分。
(4)函数体;指函数代码段,也是函数的主体部分。
(5)注释部分:指对函数体中各语句的解释和说明文本,注释语句是以%引导的。例如:
function[output,output2]=function—example(input1,input2)
%
函数题头
%This is function to exchange two matrices
%
HI行
%input1,input2 are input variables
%
帮助信息
%output1,output2 are output variables
%
帮助信息
output1=input2;
%
函数体
output2=input1;
%
函数体
%The end of this example function [a,b]=function---example(a,b)a=
b=
可以看到通过使用函数可以和上一节中的示例一样同等矩阵a、b进行了相互交换。在该函数题头中,“function”为MATLAB语言中函数的标示符,而function---example为函数名,input1、input2为输入变量,而output1、output2为输出变量,实际调用过程中,可以用有意义的变量替代使用。题头的定义是有一定的格式要求的,输出变量是由中括号标识的,而输入变量是由小括号标识的,各变量间用逗号间隔,应该注意到,函数的输入变量引用的只是该变量的值而非其他值,所以函数内部对输入变量的操作不会带回到工作空间中。
函数题头下的第一行注释语句为HI行,可以通过lookfor命令查看;函数的帮助信息可以通过help命令查看。
函数体是函数的主体部分,也是实现编程目的的核心所在,它包括所有可执行的一切MATLAB语言代码。
在函数体中“%”后的部分为注释语句,注释语句主要是对程序代码进行说明解释,使程序易于理解,也有利于程序的维护。MATLAB语言中将一行内百分号后所有文本均视为注释部分,在程序的执行过程中不被解释,并且百分号出现的位置也没有明确的规定,可以是一行的首位,这样,整行文本均为注释语句,也可以是在行中的某个位置,这样其后所有文本将被视为注释语句,这也展示了MATLAB语言在编程中的灵活性。
尽管在上文中介绍了函数文件的5个组成部分,但是并不是所有的函数文件都需要全部的这5个部分,实际上,5部分中只有函数题头是一个函数文件所必需的,而其他的4个部分均可省略。当然,如果没有函数体则为一空函数,不能产生任何作用。
在MATLAB语言中,存储M文件时文件名应当与文件内主函数名相一致,这是因为在调用M文件时,系统查询的相应的文件而不是函数名,如果两者不一致,则或者打不开目的文件,或者打开的是其他文件。鉴于这种查询文件的方式与以往程序设计语言不同,在其他的语言系统中,函数的调用都是指对函数名本身的,所以,建议在存储M文件时,应将文件名与主函数名统一起来,以便于理解和使用。
6.2 函数变量及变量作用域
在MATLAB语言的函数中,变量主要有输入变量、输出变量及函数内所使用的变量。输入变量相当于函数入口数据,是一个函数操作的主要对象。某种程度上讲,函数的作用就是对输入变量进行加工以实现一定的功能。如前节所述,函数的输入变量为形式参数,即只传递变量的值而不传递变量的地址,函数对输入变量的一切操作和修改如果不依靠输出变量传出的话,将不会影响工作空间中该变量的值。
MATLAB语言提供了函数nargin和函数varargin来控制输入变量的个数,以实现不定个数参数输入的操作。
函数对于函数变量而言,还应当指出的是其作用域的问题。在MATLAB语言中,函数内定义的变量均被视为局部变量,即不加载到工作空间中,如果希望使用全局变量,则应当使用命令global定义,而且在任何使用该全局变量的函数中都应加以定义。在命令窗口中也不例外。例如:
% 这里一个全局变量的示例
function [num1,num2,num3]=text(varargin)global firstlevel secondlevel
%定义全局变量 num1=0; num2=0; num3=0;
list=zeros(nargin); for i=1:nargin list(i)=sum(varargin{i}(:));
list(i)=list(i)/length(varargin{i}); if list(i)>firstlevel
num1=num1+1 elseif list(i)>secondlevel
num2=num2+1;
else num3=num3+1; end end
% 在命令窗口中也应定义相应的全局变量 >> global firstlevel secondlevel >> firstlevel=85; >> secondlevel=75;(程序运行结果略)
从该例中可以看到,定义全局变量时,与定义输入变量和输出变量不同,变量之间必须用空格分隔,而不能用逗号分隔,否则系统将不能识别逗号后的全局变量。6.3 子函数与局部函数
在MATLAB语言中,与其他的程序设计语言类似,也可以定义子函数,以扩充函数的功能。在函数文件中题头中所定义的函数为主函数,而在函数体内定义的其他函数均被视为子函数。子函数只能被主函数或同一主函数下其他的子函数所调用。
在MATLAB语言中将放置在目录private下的函数称为局部函数,这些函数只能被private目录的父目录中函数调用,而不能被其他的目录的函数调用。
局部函数与子函数所不同的是局部函数可以被其父目录下的所有函数所调用,而子函数则只能为其所在的M文件的主函数所调用,所以局部函数可应用范围大于子函数;在函数编辑的结构上,局部函数与一般的函数文件的编辑相同,而子函数则只能在主函数文件中编辑。
当在MATLAB的M文件中调用函数时,首先将检测该函数是否为此文件的子函数;如果不是的话,再检测是否为可用的局部函数;当结果仍然为否定时,再检测该函数是否为MATLAB搜索路径上的其他M文件。
6.4 流程控制语句
如其他的程序设计语言一样,MATLAB语言也给出了丰富的流程控制语句,以实现具体的程序设计。在命令窗口中的操作虽然可以实现人面交互,但是所能实现的功能却相对简单,虽然也可以在命令窗口中使用流程控制语句,但是由于命令窗口中交互式的执行方式,使用得这样的操作极为不方便;而在M文件中,通过对流程控制语句的组合使用,可以实现多种复杂功能。MATLAB语言的流程控制语句主要有for、while、if-else-end及switch-case等4种语句。6.4.1 for语句
for循环语句是流程控制语句中的基础,使用该循环语句可以以指定的次数重复执行循环体内的语句。
for循环语句的调用形式为:
for 循环控制变量=〈循环次数设定〉
循环体
end 例如:
for i=1:2:12
s=s+i;
end 在上例中,循环次数由数组1:2:12决定,设定循环次数的数组可以是已定义的数组,也可以在for循环语句中定义,此时定义的格式为:
〈初始值〉:〈步长〉:〈终值〉 初始值为循环变量的初始设定值,每执行循环体一次,循环控制变量将增加步长大小,直至循环控制变量的值大于终值时循环结束,这里步长是可以为负的。在for循环语句中,循环体内不能出现对循环控制变量的重新设置,否则将会出错,for循环允许嵌套使用。
6.4.2 while语句
while循环语句与for循环语句不同的是,前者是以条件的满足与否来判断循环是否结束的,而后者则是以执行次数是否达到指定值为判断的。while循环语句的一般形式为:
while〈循环判断的语句〉
循环体 end 其中循环判断语句为某种形式的逻辑判断表达式,当该表达式的值为真时,就执行循环体内的语句;当表达式的逻辑值为假时,就退出当前的循环体。如果循环判断语句为矩阵时,当且仅当所有的矩阵元素非零时,逻辑表达式的值为真。
在while循环语句中,在语句内必须有可以修改循环控制变量的命令,否则该循环语言将陷入死循环中,除非循环语句中有控制退出循环的命令,如break语句。当程序流程运行至该命令时,则不论循环控制变量是否满足循环判断语句均将退出当前循环,执行循环后的其他语句。
与break语句对应,MATLAB还提供了continue命令用于控制循环,当程序流运行至该命令时会忽略其后的循环体操作转而执行下一层次的循环。当循环控制语句为一空矩阵时,将不执行循环体的操作而直接执行其后的其他命令语句,即空矩阵被认为是假。
6.4.3 if-else-end语句
条件判断语句也是程序设计语言中流程控制语句之一。使用该语句,可以选择执行指定的命令,MATLAB语言中的条件判断语句是if-else-end语句。if-else-end语句的一般形式为:
if〈逻辑判断语句〉
逻辑值为“真”时执行的语句 else 逻辑值为“假”时执行的语句 end 当逻辑判断表达式为“真”时,将执行if与else语句间的命令,否则将执行else与end语句间的命令。例如:
if
a=1 a=a+1 else a=a+2 end 在MATLAB语言的if-else-end语句中的eles子句是可选项,即语句中可以不包括else子句的条件判断。在程序设计中,也经常碰到需要进行多重逻辑选择的问题,这时可以采用if-else-end语句的嵌套形式:
if〈逻辑判断语句1〉
逻辑值1为“真”时的执行语句
elseif〈逻辑判断语句2〉
逻辑值2“真”时的执行语句
elseif〈逻辑判断语句3〉 „„ else 当以上所有的逻辑值均为假时的执行语句
end 在以上的各层次的逻辑判断中,若其中任意一层逻辑判断为真,则将执行对应的执行语句,并跳出该条件判断语句,其后的逻辑判断语句均不进行检查。
6.4.4switch-case语句
if-else-end语句所对应的是多重判断选择,而有时也会遇到多分支判断选择的问题。MATLAB语言为解决多分支判断选择提供了switch-case语句。switch-case语句的一般表达形式为:
switch〈选择判断量〉
Case
选择判断值1
选择判断语句1 case
选择判断值2
选择判断语句2 „„
otherwise
判断执行语句
end 与其他的程序设计语言的switch-case语句不同的是,在MATLAB语言中,当其中一个case语句后的条件为真时,switch-case语句不对其后的case语句进行判断,也就是说在MATLAB语言中,即使有多条case判断语句为真,也只执行所遇到的第一条为真的语句。这样就不必像C语言那样,在每条case语句后加上break语句以防止继续执行后面为真的case条件语句。
自定义笔记区
MATLAB有很强的图形功能,可以方便地实现数据的视觉化。强大的计算功能与图形功能相结合为MATLAB在科学技术和教学方面的应用提供了更加广阔的天地。下面着重介绍二维图形的画法,对三维图形只作简单叙述。5.1 二维图形的绘制
5.1.1 基本形式
二维图形的绘制是MATLAB语言图形处理的基础,MATLAB最常用的画二维图形的命令是plot,看两个简单的例子:
>> y=[0 0.58 0.70 0.95 0.83 0.25];>> plot(y)生成的图形见图5-1,是以序号1,2,,6为横坐标、数组y的数值为纵坐标画出的折线。
>> x=linspace(0,2*pi,30);
% 生成一组线性等距的数值 >> y=sin(x);
>> plot(x,y)生成的图形见图5-2,是[0,2]上30个点连成的光滑的正弦曲线。
图5-1
图5-2 5.1.2 多重线
在同一个画面上可以画许多条曲线,只需多给出几个数组,例如
>> x=0:pi/15:2*pi;>> y1=sin(x); >> y2=cos(x); >> plot(x,y1,x,y2)则可以画出图5-3。多重线的另一种画法是利用hold命令。在已经画好的图形上,若设置hold on,MATLA将把新的plot命令产生的图形画在原来的图形上。而命令hold off 将结束这个过程。例如:
>> x=linspace(0,2*pi,30);y=sin(x);plot(x,y)先画好图5-2,然后用下述命令增加cos(x)的图形,也可得到图5-3。
>> hold on >> z=cos(x);plot(x,z)>> hold off 110.80.80.60.40.60.40.20.200-0.2-0.2-0.4-0.4-0.6-0.6-0.8-0.8-101234567-101234567
图5-3
图5-4
5.1.3 线型和颜色
MATLAB对曲线的线型和颜色有许多选择,标注的方法是在每一对数组后加一个字符串参数,说明如下:
线型
线方式:
-实线
:点线
-.虚点线
--波折线。线型
点方式:
.圆点
+加号
* 星号
x x形
o 小圆 颜色:
y黄; r红; g绿;
b蓝;
w白;
k黑;
m紫; c青.以下面的例子说明用法: >> x=0:pi/15:2*pi;
>> y1=sin(x);y2=cos(x);
>> plot(x,y1,’b:+’,x,y2,’g-.*’)可得图形5-4。
5.1.4 网格和标记
在一个图形上可以加网格、标题、x轴标记、y轴标记,用下列命令完成这些工作。
>> x=linspace(0,2*pi,30);y=sin(x);z=cos(x);>> plot(x,y,x,z)>> grid >> xlabel(‘Independent Variable X’)
>> ylabel(‘Dependent Variables Y and Z’)>> title(‘Sine and Cosine Curves’)它们产生图5-5:
Sine and Cosine Curves10.80.60.4Dependent Variables Y and Z0.20-0.2-0.4-0.6-0.8-101234Independent Variable X567
图5-5 也可以在图形的任何位置加上一个字符串,如用:
>> text(2.5,0.7,’sinx’)
表示在坐标x=2.5, y=0.7处加上字符串sinx。更方便的是用鼠标来确定字符串的位置,方法是输入命令:
>> gtext(‘sinx’)
在图形窗口十字线的交点是字符串的位置,用鼠标点一下就可以将字符串放在那里。
5.1.5 坐标系的控制
在缺省情况下MATLAB自动选择图形的横、纵坐标的比例,如果你对这个比例不满意,可以用axis命令控制,常用的有:
axis([xmin xmax ymin ymax])
[ ]中分别给出x轴和y轴的最大值、最小值 axis equal 或
axis(‘equal’)
x轴和y轴的单位长度相同 axis square 或
axis(‘square’)
图框呈方形 axis off 或
axis(‘off’)
清除坐标刻度
还有axis auto
axis image
axis xy
axis ij
axis normal
axis on
axis(axis)用法可参考在线帮助系统。
5.1.6 多幅图形
可以在同一个画面上建立几个坐标系, 用subplot(m,n,p)命令;把一个画面分成m×n个图形区域, p代表当前的区域号,在每个区域中分别画一个图,如
>> x=linspace(0,2*pi,30);
y=sin(x);z=cos(x);>> u=2*sin(x).*cos(x);v=sin(x)./cos(x);>> subplot(2,2,1),plot(x,y),axis([0 2*pi –1 1]),title(‘sin(x)’)>> subplot(2,2,2),plot(x,z),axis([0 2*pi –1 1]),title(‘cos(x)’)
>> subplot(2,2,3),plot(x,u),axis([0 2*pi –1 1]),title(‘2sin(x)cos(x)’)>> subplot(2,2,4),plot(x,v),axis([0 2*pi –20 20]),title(‘sin(x)/cos(x)’)共得到4幅图形,见图5-6.sin(x)11cos(x)0.50.500-0.5-0.5-10246-102462*sin(x)cos(x)120sin(x)/cos(x)0.51000-0.5-10-10246-200246
笔记区域