重庆工商大学数学模型与数学实验课件第05讲 程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第05讲MATLAB程序设计数据和函数的可视化主要内容1、M文件2、matlab控制流3、matlab程序调试5.1M文件1、MATLAB的M文件有两种(脚本文件和函数文件)脚本文件:将原来要在MATLAB环境直接输入的语句,放在一个以.m为后缀的文件中。函数文件:它的第一行必须是函数定义行,用来标示其与脚本文件的不同,也存在.m文件中。5.1M文件脚本文件的特点:1.)它是一串按用户意图排列而成的(包括控制流向指令在内的)MATLAB指令集合。2.)脚本文件运行后,所产生的所有变量都驻留在MATLAB基本空间(workspace)中。只要用户不使用clear指令加以清除,且MATLAB指令窗不关闭,就可非常方便地从工作区中查询当前某个变量的计算情况。5.1M文件函数文件的构成(由5个部分组成)(1)函数定义行(脚本文件无需定义行)位于函数文件的首行,以MATLAB关键字function开头,函数名以及函数的输入输出变量都在这一行定义。function[f,g]=fname(x,y);(2)函数信息说明行(H1)紧随函数定义行之后的以%开头的注释行的第一行。H1行包括:大写体的函数文件名;运用关键词简要描述的函数功能。H1行作用:供help帮助使用(3)函数帮助文本H1行及其之后的连续以%开头的所有注释行构成整个在线帮助文本。通常包括:函数输入输出变量含义函数调用格式的说明5.1M文件(4)函数体是指完成指定功能的MATLAB指令集合,它接收输入变量,进行程序流控制,得到输出变量。可调用任何可用的MATLAB提供的函数和用户自己定义的函数。(5)注释是指在函数体中对某些程序行所进行的注释。以%标注,可以出现在函数体的任何需要的地方。举例演示注释行functionb=mean(a)%MEANAverageormeanvalue.%Forvectors,MEAN(a)isthemeanvalueofa%Formatrix,MEAN(a)istherowvector%containingthemeanvalueofeachcolumn[m,n]=size(a);%Thedimensionofmatricsaifm==1m=n;endb=sum(a)/m;函数定义行H1行帮助行函数体[m,n]=size(a);%ThedimensionofmatricsXifm==1m=n;endb=sum(a)/m脚本文件脚本文件和函数文件的比较5.1M文件2、函数工作空间每当函数文件运行时,matlab会为它开辟一个临时工作空间称之为函数工作空间。说明:1、函数工作空间相对于基本工作空间是独立的、临时的2、函数工作空间随具体函数文件的调用而产生,随调用结束而删除3、函数运行时产生的所有中间变量都存放在函数工作空间中4、函数执行完成后,临时函数空间及所有的中间变量即被清除5.1M文件3、函数的输入、输出变量相同点:MATLAB中,函数的输入、输出变量的含义与C语言的函数相同。异同点:实际调用时,所用的输入、输出变量的个数可以少于原定义函数的变量的个数。5.1M文件4、局部变量和全局变量局部变量:是存在于函数工作空间内部的中间变量,产生于函数的运行过程中,影响范围仅限于该函数本身。全局变量:通过globle指令定义的变量,可以同时由几个不同的函数工作空间以及基本工作空间共享。全局变量应用示例.functionf=wadd(x,y)globlealphabetaf=alpha*x+beta*y;globalalphabetaalpha=1;beta=2;s=wadd(1,2)在命令窗口中输入:5.1M文件5、主函数和子函数说明:1、与c语言相似,matlab中也可以定义子函数,来扩充函数的功能2、子函数只能被主函数或同一主函数下的其它子函数所调用定义:在函数文件中题头定义的函数被称为主函数函数体内定义的其它函数均被视为子函数functionc=testarg(a,b)c=test1(a,b)*test2(a,b);functionc=test1(a,b)c=a+b;functionc=test2(a,b)c=a-b;%主函数%子函数1%子函数25.2matlab控制流matlab提供了五种控制程序流的结构:for循环结构while循环结构if-else-end分支结构switch-case结构try-catch结构条件控制语句5.2matlab控制流1.if-else-end分支结构,条件控制语句。(1)单分支ifexpressioncommandsend如果表达式expression为真,执行组命令commands,否则跳过该组命令。例:假设定义m×n的矩阵A。下面的语句是判断矩阵A的第1列元素是否为0,若全为0,则从矩阵A中删除第1列。ifA(:,1)==0[m,n]=size(A);A=A(1:m,2:n);end5.2matlab控制流(2)双分支ifexpression判决条件commands1表达式为真时,执行命令commands1elsecommands2表达式为假时,执行命令commands2end5.2matlab控制流判决表达式2(3)多分支ifexpression1commands1elseifexpression2commands2……elsecommandskend判决表达式1表达式1为真,执行commands1,结束此结构表达式1为假,而表达2为真,执行commands2,结束此结构当前面所有表达式均为假时,执行该组命令说明:表达式为空时,MATLAB认为表达式为假。例:ifn0disp('inputnmustbepositive.')elseifn==0disp('n==0')elseifrem(n,2)==0disp('n是2的整数倍')elsedisp('其它情况')end5.2matlab控制流2.switch-case结构,条件控制语句switchexcasetest1commands1casetest2commands2……casetestkcommandskotherwisecommandsendex为一标量或字符串当ex等于test1时,执行组命令1,然后跳出该结构当ex等于testk时,执行组命令k,然后跳出该结构当表达式不等于前面所有的检测值时,则执行该组命令检测掷一次骰子所得的点数是单数还是双数functiondicetest(result)switchresultcase{1,3,5}disp('oddnumberofeye')case{2,4,6}disp('evennumberofeye')otherwisedisp('whatkindofdicedoyouhave?')end说明:case后的检测值可以是标量、字符串和元胞数组若检测值是元胞数组,matlab将表达式的值和元胞数组中的所有值进行比较,只要元胞数组中有一个元素与表达式的值相等,则认为比较结果为真。5.2matlab控制流3.try-catch结构,条件控制语句trycommands1catchcommands2end执行commands1,若正确,则跳出此结构若执行commands1时出现错误,则执行commands2N=4;A=rand(3);tryA_N=A(N,:)catchA_end=A(end,:)endlasterr显示最新出错信息,并终止程序%如果取A(N,:)出错,则改取A的最后一行5.2matlab控制流4.指定重复次数的循环语句forvariable=expressionstatementsend说明:在for和variable之间需要有一个空格。这里的variable是循环变量名。在表达式中给出循环的初始值、步长和终值。功能:这个命令就是反复执行一条语句或一组语句,而执行的次数已预先定义好。以end结束这组语句5.2matlab控制流5.不指定重复次数的循环语句说明:无论是for循环还是while循环均可用break语句终止循环。whileexpressioncommandsend功能:只要逻辑表达式为真,while命令将反复执行程序语句。举例:在区间[-2,-0.75]内,步长为0.25,对函数y=f(x)=1+1/x求值,并列表。将所得x值和y值分别存入向量r和s中,并列表显示。r=[];s=[];forx=[-2.0:0.25:-0.75];y=1+1/x;r=[rx];s=[sy];end[r;s]var=[123456-1780];a=[];k=1;whilevar(k)ifvar(k)==-1break;enda=[avar(k).^2];k=k+1;enddisp(a)例题开讲不必等到循环自然结束,当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句.continue控制跳过循环体中的某些语句,当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续执行下一次循环求:[100,200]之间第一个能被21整除的整数?forn=100:200ifrem(n,21)~=0continueendbreakendn5.2matlab控制流控制流的其它常用指令:1、利用input函数输入参数,并可同时显示出提示信息利用disp函数,可向命令窗口输出信息2、利用keyboard函数进入键盘主控状态,直接修改或输入变量;3、pauseerror和warning指令5.2matlab控制流1.用input()函数输入参数(1)当输入参数是数值时:y=input(‘thevalueofyis:’);f=input(‘frequencyis:’);在指令窗的工作区中会显示提示信息5.2matlab控制流(2)当直接输入字符串变量时:需要用‘s’选项对其进行类型说明。y=input(‘methods:’,‘s’);说明:这里的input函数与c语言中的不同.它不需要对输入参数的类型进行说明.如:%f,%d.x=input('请输入x的值:');ifx==10y=cos(x+1)+sqrt(x*x+1);elsey=x*sqrt(x+sqrt(x));endydisp(y)10101)1cos(2xxxxxxxy5.2matlab控制流2.键盘控制keyboard说明:1、遇到keyboard时,将“控制权”交给键盘,用户可以从键盘输入各种matlab指令。2、仅当用户输入return指令后,“控制权”才交还给程序keyboard[m,n]=size(x);ifm==1m=n;endy=sum(x)/m5.2matlab控制流3、pause、error和warning指令pausepause(n)暂停执行文件,等待用户按任意键后继续暂停执行文件n秒,在继续执行t=0:2*pi/99:2*pi;x=1.15*cos(t);y=3.25*sin(t);plot(x,y),axisnormal,gridon,title('NormalandGridon')disp('以上是轴的通常设置。')disp(‘按任意键继续!下面是X-Y轴刻度等长度设置情况。')pauseplot(x,y),axisequal,gridon,title('Equal')5.2matlab控制流error(‘message’)lasterrwarning(‘message’)lastwarn显示出错信息message,并终止程序显示matlab自动判断的最新出错原因,并终止程序显示警告信息message,程序继续运行显示matlab自动给出的最新警告信息,并继续运行N=4;A=rand(3);tryA_N=A(N,:);catchA_end=A(end,:);endlasterrlastwarn5.3程序的调试所谓的程序调试,就是指当发现你所编制的程序无法得到你所期望的结果时,所进行的错误修正。一般情况下的程序错误可以分为两类(1)格式错误这类错误比较容易定位和检查。(2)运行错误这类

1 / 41
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功