实验二MATLAB程序设计.docx
实验二 MATLAB程序设计实验二 MATLAB程序设计 一、 实验目的 1.掌握利用if语句实现选择结构的方法。 2.掌握利用switch语句实现多分支选择结构的方法。 3.掌握利用for语句实现循环结构的方法。 4.掌握利用while语句实现循环结构的方法。 5.掌握MATLAB函数的编写及调试方法。 二、 实验的设备及条件 计算机一台。 M文件的编写: 启动MATLAB后,点击File|New|M-File,启动MATLAB的程序编辑及调试器,编辑以下程序,点击File|Save保存程序,注意文件名最好用英文字符。点击Debug|Run运行程序,在命令窗口查看运行结果,程序如有错误则改正 三、 实验内容 1.编写求解方程ax2+bx+c=0的根的函数,这里应根据a、b、c的不同取值分别处理,有输入参数提示,当a=0,b=0,c=0时应提示“为恒不等式!”。并输入几组典型值加以检验。 2.输入一个百分制成绩,要求输出成绩等级A+、A、B、C、D、E。其中100分为A+,90分99分为A,80分89分为B,70分79分为C,60分69分为D,60分以下为E。 要求:用switch语句实现。 输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 3.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 2®1 3®10®5®16®8®4®2®1 6®3®10®5®16®8®4®2®1 1 运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。 请为关键的Matlab语句填写上相关注释,说明其含义或功能。 %classic "3n+1" problem from number theory. while 1 n=input('Enter n,negative quits:'); if n<=0 break end a=n; while n>1 if rem(n,2)=0 n=n/2; else n=3*n+1; end a=a,n; end a end 4. 编写一个函数,计算下面函数的值,给出标量x的值,调用该函数后,返回y的值。 function y=myfun1(x) ìsinx,ïy(x)=íx,ï-x+6,î选择一些数据测试你编写的函数。 x£00<x£3x>35. 编写一个函数求向量x中元素的平均值、最大值、最小值、均方根值。 function m_x,max_x,min_x,rms_x=myfun2(x)方均根值(Root Mean Square)的计算公式为: rms=用下面数据测试你写的函数: x=sin(0:0.01:6*pi) 1N2xåi i=1Nx=rand(1,200),得到的x为200个之间均匀分布的随机数。 2 6.根据p26=1111+.+,求p的近似值。当n分别取100、1000、122232n210000时,结果是多少? 思考题: 有一分数序列: 13581321 , , , , , , ××× 2235813 编写一段程序,求前16项的和。 四、实验报告要求 1.实验名称 2.实验目的 3.实验设备及条件 预习报告要求 4.实验内容及要求 5.实验程序设计 指程序代码。 6.实验结果及结果分析 实验结果要求必须客观,有数据的可以记录数据,没有数据的简单描述实验现象。结果分析是对实验结果的理论评判。 7.实验中出现的问题及解决方法 8. 思考题的回答 最终报告要求 四、 实验报告的提交方式 Word文档,命名方式:实验号_你的学号_姓名! 例如本次实验:实验一_000000001_张三.doc :E_mail: matlab_xx01 (网络工程101提交作业邮箱):E_mail: Matlab_wg01。 4.实验内容及要求 把实验内容的应用题,用MATLAB的语法编写出来,并运行成功,注意题与题之间用相应注释分割。 5.实验程序设计 %1 disp('一元二次方程计算器,请输入下列数值进行计算:'); a=input('a='); b=input('b='); c=input('c='); if a=0 & b=0 & c=0 disp('此为恒不等式'); else d=b*b-4*a*c; x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a); disp('x1=',num2str(x(1),',x2=',num2str(x(2); end 4 程序设计 %2 scores=input('成绩等级划分请输入一个百分制成绩,查询划分等级:'); switch scores case 100 rate='A+' case num2cell(90:99) rate='A' case num2cell(80:89) rate='B' case num2cell(70:79) rate='C' case num2cell(60:69) rate='D' case num2cell(0:59) rate='E' otherwise disp('输出出错'); end disp(rate) %3 %classic "3n+1" problem from number theory. while 1 n=input('Enter n,negative quits:'); %输入一个非负整数 if n<=0 %如果输入的数为负数,则不做操作 break end a=n; %将n的值赋值给a while n>1 %满足条件n>1时循环下列语句 5 if rem(n,2)=0 %当n能被2整除则n除以2 n=n/2; else %如果不能被整除,则n乘以3加1 n=3*n+1; end a=a,n; %输出数组a,n,并对比n是否>1,大于则继续上诉循环 end a %输出最后的结果a end %4 myfun1.m %- clc format compact format long g x=input('请输入x的值:'); y=tran1(x); disp('y=') disp(y) %4 tran.m %- function y=myfun1(x) %当 x<=0 y=sin(x); %当 3>x>0 y=x; %当 x>3 y=-x+6; 6 if x<=0 y=sin(x); elseif 3>x>0 y=x; else x>3 y=-x+6; end %5 tran.m %- function m_x,max_x,min_x,rms_x=myfun2(x) %分别是平均值,最大值,最小值,均方根值 m_x=mean(mean(x) max_x=max(max(x) min_x=min(min(x) a=sqrt(mean(x.2); rms_x=sqrt(mean(a.2) %5 myfun2.m %- x=input('平均值、最大值、最小值、均方根值的计算,请输入x的值,:'); m_x,max_x,min_x,rms_x=tran(x); disp('平均值为') m_x disp('最大值为') max_x disp('最小值为') min_x 7 disp('均方根值为') rms_x %6 disp('(pi2)/6 = (1/12)+(1/22)+(1/32)+(1/n2),求pi的近似值') approximation=0; n=input('请输出n值:'); approximation=sqrt(sum(1./(1:n).2)*6); approximation 6.实验结果及结果分析 第一题 一元二次方程(ax2+bx+c=0)计算器,请输入下列数值进行计算: a=2 b=1 c=3 x1=-0.25+1.199i,x2=-0.25-1.199i - 一元二次方程(ax2+bx+c=0)计算器,请输入下列数值进行计算: 8 a=0 b=0 c=>> 2 此为恒不等式 第二题 成绩等级划分请输入一个百分制成绩,查询划分等级:111 输出出错 成绩等级划分请输入一个百分制成绩,查询划分等级:55 E _ 第三题 %classic "3n+1" problem from number theory. while 1 n=input('Enter n,negative quits:'); %输入一个非负整数 if n<=0 %如果输入的数为负数,则不做操作 break end a=n; %将n的值赋值给a while n>1 %满足条件n>1时循环下列语句 if rem(n,2)=0 %当n能被2整除则n除以2 n=n/2; else %如果不能被整除,则n乘以3加1 n=3*n+1; end a=a,n; %输出数组a,n,并对比n是否>1,大于则继续上诉循环 end 9 a %输出最后的结果a end 第四题 请输入x的值:-1 y= -0.841470984807897 - 请输入x的值:2 y= 2 - 请输入x的值:9 ans = 1 y= -3 第五题 请输入x的值:sin(0:0.01:6*pi) 平均值为 m_x = -1.1256e-007 最大值为 max_x = 1.0000 最小值为 min_x = 10 -1.0000 均方根值为 rms_x = 0.7071 请输入x的值:rand(1,200) 平均值为 m_x = 0.4969 最大值为 max_x = 0.9943 最小值为 min_x = 0.0099 均方根值为 rms_x = 0.5707 第六题 (pi2)/6 = (1/12)+(1/22)+(1/32)+(1/n2),求pi的近似值 请输出n值:100 approximation = 3.1321 (pi2)/6 = (1/12)+(1/22)+(1/32)+(1/n2),求pi的近似值 请输出n值:1000 approximation = 11 3.1406 (pi2)/6 = (1/12)+(1/22)+(1/32)+(1/n2),求pi的近似值 请输出n值:10000 approximation = 3.1415 7.实验中出现的问题及解决方法 对函数的嵌套关系理解混乱 解决:反复尝试,得出正确的嵌套关系。 ''没有运行成功。 解决:需要加符号'.',不然无法得出预期结果 8. 思考题的回答 a=3; b=2; s=1/2; for i=1:15 s=s+a/b; c=a; a=a+b; b=c; end 12