《实验3-MATLAB程序设计实验.doc》由会员分享,可在线阅读,更多相关《实验3-MATLAB程序设计实验.doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、科学计算与数据处理实验报告学号姓名实验名称MATLAB程序设计实验实验目的1、 掌握M文件的编辑、调试和性能剖析方法2、 掌握MATLAB脚本和函数的设计方法3、 掌握MATLAB程序的基本语法、关系运算和控制结构4、 掌握串演算函数的用法实验方案1、 编写两段简短的代码,演示MATLAB脚本和函数的不同。2、 编写程序演示循环(for、while)、分支(if-else-end、switch-case)和异常处理(try-catch)控制结构的用法,并尽量体现各种关系运算符(=、=、=)的用法。3、 编写程序演示return、input、keyboard、pause、break、error、
2、lasterr、warning、lastwarn等指令的功能和用法。4、 串演算实验:设计实验演示验证eval与feval的功能和用法。5、 程序调试实验。6、 程序性能剖析实验。实验记录(1)脚本n=input(enter number to sort:);array=zeros(1,n);for i=1:n string=enter value int2str(i) :; array(i)=input(string);endsorted=sort(array);fprintf(n sorted data:n);for i=1:n fprintf(%dn,sorted(i);end sort
3、edenter number to sort:4enter value1:5enter value2:2enter value3:1enter value4:9 sorted data:1259函数function s=mysum(x,y)s=x+y;disp(s); clear mysum(1,3) 4ans = 4(2)1.for循环 clear sum=0; for i=1:100sum=sum+i;end sumsum = 50502.while循环 clear sum=0; i=1; while i sumsum = 50503. if-else-end分支 clear a=zero
4、s(3); if adisp(全零数组被判为真);elsedisp(全零数组被判为假);end全零数组被判为假4. switch-case分支 clear a=4; switch rem(a,2)case 0disp(num2str(a),是偶数);case 1disp(num2str(a),是奇数);end4是偶数5. try-catch异常处理 clear trydet(rand(2,4);disp(no error found);catchdisp(catch codon is executed);disp(错误是:);disp(lasterr);endcatch codon is ex
5、ecuted错误是:Error using = detMatrix must be square.6. 各种关系运算符 clear op1=(3 op2=(34); op3=(3=4); op4=(3=4); op5=(3 op6=(3=4); op=op1;op2;op3;op4;op5;op6; opop = 1 0 1 0 1 0(3)1.return、input clear n=input(please enter a value:);please enter a value:-2 if n clear keyboardK for i=1:10if i=3continueendfpri
6、ntf(i=%dn,i);if i=6breakendendi=1i=2i=4i=5i=6K return3.error clear sum1=0; sum2=0; n=1; if n clear n=1; if n clear a=b=magic(3); eval(a)b = 8 1 6 3 5 7 4 9 22. feval clear h=sin; y=feval(h,2); fprintf(num2str(y);0.9093(5) 程序调试实验运行图像如下:同时,程序报错如下:? Error using = plotVectors must be the same lengths.Er
7、ror in = C:MATLAB6p5p1workDebug_Test.m (barzzy0)On line 18 = plot( xxmu, yy, r, Linewidth, 3 )Error in = C:MATLAB6p5p1workDebug_Test.mOn line 7 = barzzy0( nn, xx, xmu, xstd );根据报错信息提示:Error in = C:MATLAB6p5p1workDebug_Test.m (barzzy0)On line 18 = plot( xxmu, yy, r, Linewidth, 3 ),得知源程序在调用plot时发生了错误。
8、查看源程序第18行,并且在这一行设置断点。再次运行程序,查看xxmu的值:K xxmuxxmu = -0.0959 -2.4934查知xxmu的长度为2,再查看yy的值:K yyyy = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25查知yy的长度为26,而xxmu的长度为2,两个向量的长度不一样,这可能是程序出错的原因。在程序中找到xxmu赋值语句,在第15行:xxmu = xmu * size(yy);其中xmu为x的均值,size(yy)为一个由yy的行数和列数构成的行向量,所以xxmu为一个含有两个
9、元素的行向量,修改为:xxmu = xmu * ones(size(yy);取消断点,保存文件,再次运行程序: randn( seed, 1), x = randn( 1,100 ); Debug_Test( x )xxmu = Columns 1 through 19 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 Columns 20 t
10、hrough 26 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959 -0.0959ans = 1 3 4 16 21 19 20 9 6 1程序图像如下:(6)程序性能剖析实验单击 relaxzzy 链接通过上图知relaxzzy 函数中最耗时的语句是第 18 行的语句,该语句的执行时间是 0.279 秒,被调用次数是 3000000 次。该语句是可以被加速的。实验总结通过本次实验,更深入的学习了Matlab,知道了Matlab中函数与脚本的不同之处,能够用for、while循环语句以及if-else-end、switch-case分支语句做简单的程序设计来实现更多的功能,最后通过实例程序实验掌握了M文件的编辑、调试和性能剖析等方法。8