1科学计算与数据处理实验报告学号姓名实验名称MATLAB程序设计实验实验目的1、掌握M文件的编辑、调试和性能剖析方法2、掌握MATLAB脚本和函数的设计方法3、掌握MATLAB程序的基本语法、关系运算和控制结构4、掌握串演算函数的用法实验方案1、编写两段简短的代码,演示MATLAB脚本和函数的不同。a)新建一个文件为randplt.m,b)编写函数stderr求实验误差2、编写程序演示循环(for、while)、分支(if-else-end、switch-case)和异常处理(try-catch)控制结构的用法,并尽量体现各种关系运算符(==、~=、、、=、=)的用法。c)演示循环(for、while)d)分支(if-else-end、switch-case)e)异常处理(try-catch)3、编写程序演示return、input、keyboard、pause、break、error、lasterr、warning、lastwarn等指令的功能和用法。a)return的功能和用法b)input的功能和用法c)keyboard的功能和用法d)pause的功能和用法e)break的功能和用法f)error的功能和用法g)lasterr的功能和用法h)warning的功能和用法i)lastwarn的功能和用法4、统串演算实验:设计实验演示验证eval与feval的功能和用法。a)eval的功能和用法b)feval的功能和用法5、程序调试实验。a)出错时b)改正后6、程序性能剖析实验a)profileonb)relaxzzy(300)c)profileviewer实验记录1、编写两段简短的代码,演示MATLAB脚本和函数的不同。a)新建一个文件为randplt.m,data=randn(1,20);plot(data);运行结果:2保存后选择debug/run菜单或按F5键运行,观察workspace中多出了一个变量data。b)编写函数stderr求实验误差functionerr=stderr(arr)%实验误差(标准差估计)evaluatealongeachcolumnofarrerr=std(arr)./sqrt(size(arr,1)-1);文件存为stderr.m,运行时输入a=[1;2;3];建立一个列数组a,然后输入stderr(a)则给出a的方差运行结果:32、编写程序演示循环(for、while)、分支(if-else-end、switch-case)和异常处理(try-catch)控制结构的用法,并尽量体现各种关系运算符(==、~=、、、=、=)的用法。a)演示循环(for、while)For循环%for循环sum1=0;sum2=0;n=input('请输入一个数:')ifn2disp('输入的数大于等于3')else4fori=1:nsum1=sum1+1sum2=sum2+2endend运行结果:While循环%while循环sum11=0;sum22=0;n=input('请输入一个数:')ifn2disp('输入的数大于等于3')5elsewhilen=0sum11=sum11+1sum22=sum22+2n=n-1endend运行结果:b)分支(if-else-end、switch-case)if-else-end分支结构:%if-else-end分支:a=input('请输入一个数字:')6ifa1a=a+1elsea=a+2end运行结果:switch-case分支结构:%switch-casen=input('请输入成绩:');k=floor(n/10);switchkcase{8,9,10}7disp('优秀')case7disp('良好')case6disp('一般')otherwisedisp('不及格')end运行结果:c)异常处理(try-catch)a=magic(4);b=eye(3);tryc=a*bc=a(1:3,1:3)*bcatchc=a(1:3,1:3)*bend运行结果:83、编写程序演示return、input、keyboard、pause、break、error、lasterr、warning、lastwarn等指令的功能和用法。a)return的功能和用法%returnn=input('请输入成绩:');k=floor(n/10);switchkcase{8,9,10}disp('优秀')returncase7disp('良好')returncase6disp('一般')returnotherwisedisp('不及格')returnend运行结果:9b)input的功能和用法%inputn=input('请输入一个数字:');k=mod(n,2);switchkcase1disp('您输入的为奇数')returncase0disp('您输入的为偶数')returnend运行结果:10c)keyboard的功能和用法%keyboard启动键盘管理pause暂停执行n=input('请输入成绩:');ifn=0errordlg('请输入大于0的数');keyboardelsek=floor(n/10);switchkcase{8,9,10}disp('优秀')returncase7disp('良好')returncase6disp('一般')returnotherwisedisp('不及格')returnendend运行结果:11d)pause的功能和用法%pausex=-pi:pi/10:piy1=(sin(x)).^2;subplot(1,2,1);plot(x,y1,'r');pause(5)y2=x.^2+x+3;subplot(1,2,2);plot(x,y2,'g');运行结果:12暂停之后:e)break的功能和用法%breakforn=1:100ifmod(n,17)~=0continueendbreakenddisp('100以内的自然数中第一个能被17整除的数是:')13disp(n)运行结果:f)error的功能和用法n=input('请输入一个数字:');if(n0)y=log(n);elseerror('定义域大于0');end运行结果:g)lasterr的功能和用法lasterr运行结果:14h)warning的功能和用法%warningn=input('请输入成绩:');ifn=0warning('请输入大于0的数');elsek=floor(n/10);switchkcase{8,9,10}disp('优秀')returncase7disp('良好')returncase6disp('一般')returnotherwisedisp('不及格')returnendend运行结果:15i)lastwarn的功能和用法warning('定义域大于0');warning('定义域小于0');lastwarn运行结果:4、串演算实验:设计实验演示验证eval与feval的功能和用法。16a)eval的功能和用法Ka='b=magic(4)';eval(a)运行结果:b)feval的功能和用法Kh=@sin;x=-pi:pi/10:pi;y=feval(h,x);运行结果:175、程序调试实验。a)出错时运行结果:18b)改正后把原程序中的xxmu=xmu*size(yy)改为xxmu=xmu*ones(size(yy))。运行结果:改正后,函数实现的功能:196、程序性能剖析实验profileonrelaxzzy(300)profileviewer运行结果:函数实现的功能:20ProfileSummary窗口显示:relaxzzy函数的进行运行分析21由上例图可知,relaxzzy函数中最耗时的语句是newplate(j,k)=(plate(jm1,km1)/2+plate(jm1,k)+...plate(jm1,kp1)/2+plate(j,km1)+plate(j,kp1)+...plate(jp1,km1)/2+plate(jp1,k)+plate(jp1,kp1)/2)/6其执行时间为0.651s,被调用次数为3000000次。这个语句可以加速,用过向量化改为矩阵的形式,就可以加速了。实验总结MATLAB脚本和函数的异同点:M脚本文件与M函数文件都是由一系列的语句组成的相对独立的一个运行体。M脚本文件没有参数传递功能,但M函数文件有此功能。M函数文件的格式有严格规定,它必须以“function”开头。函数文件与脚本文件的主要区别在于:函数文件一般都要带参数,都要有返回结果,而脚本文件没有参数与返回结果。函数文件的变量是局部变量,运行期间有效,运行完毕就自动被清除,而脚本文件的变量是全局变量,执行完毕后仍被保存在内存中。通过这次试验我掌握了M文件的编写,运行和调试。知道了函数文件和脚本文件的相同点和不同点。同时也掌握了matlab程序设计中的基本语法,关系运算,以及for和while循环结构,if-else-end和switch的分支结构和异常处理的try-catch结构。通过自己调试一个程序,明白了程序调试的基本方法。自己通过对一个程序的性能剖析,知道了性能剖析的基本方法。