《matlab编程基础1》由会员分享,可在线阅读,更多相关《matlab编程基础1(50页珍藏版)》请在金锄头文库上搜索。
1、1,4.1 概述,4.2 流程控制,4.3 脚本文件,4.4 函数文件,4.5 M文件调试,4.6 M文件性能分析,4.7 本章小结,第四章 MATLAB编程基础,2,4.1 概述,利用Matlab编程语言所编写的程序被称作M文件。 后缀为“m” 。 一、 M文件的类型 M文件分为:命令(Script)文件(或叫脚本文件); 函数(Function)文件。 二、M文件的建立 M文件可以利用任何的文本编辑器来建立、编辑和修改。 打开Matlab的内置编辑器: 打开“File”菜单,选择“New”项中的“M-file”。 点击New M-File按钮控件。 在命令行窗口中,输入命令“edit 文件
2、名”。,3,4.2 流程控制,程序结构: 顺序结构; 选择结构; 循环结构。 MATLAB的流程控制语句有四类: if, elseif, else, end 构成条件转移语句; switch, case,otherwise,end 构成情况切换语句; for,end 构成指定次重复的循环语句; while,end 构成不定次重复的循环语句。,4,4.2.1 选择结构,4.2.1.1 if语句 语法结构: if 逻辑表达式l 语句体1 elseif 逻辑表达式2 语句体2 else 语句体else end 如果逻辑表达式1的值为1(判断为真),执行语句体1。 否则,如果逻辑表达式2的值为1,执行
3、语句体2。 if-elseif-else的语句结构可以嵌套使用。,5,例4.2.1:, n=input(输入a:) if n0 %如果n0,显示错误信息 disp(Input must be positive); elseif rem(n,2)=0 %如果n是偶数,计算被2除的商 result=n/2 else %如果n是奇数,先加1再计算被2除的商 result=(n+1)/2 end 输入a:31 n = 31 result = 16,6,例4.2.2:,clear all x=input(x=); if x0 if x5 y=x*10 else y=x end else if x-5 z
4、=x*10 else z=x end end,7,4.2.1.2 switch语句,语法结构: switch 表达式(或字符串) case 值1 语句体1 case 值2 语句体2 . otherwise 语句体otherwise end 如果switch语句中的表达式的值和case语句中的值相等, 则执行这一组语句体。 只有第一个满足条件的case语句体被执行。,8,例4.2.3:,clear all x=input(x=); switch x %判断表达式x的值 case 1 %如果(x=1) disp(x=1) case2,3,4 %如果(x=2)0R(x=3)0R(x=4) disp(
5、x2,or3,or4) case 4 %如果(x=4) disp(x4) otherwise %其他情况 disp(x unknown) end,9,例4.2.4:,clear all cstring=input(Input string(elec01,elec02,etc):,s); switch cstring case elec01 disp(elec01 120) case elec02 disp(elec02 100) case elec03 disp(elec03 94) otherwise disp(unknown) end,10,4.2.2 循环结构,4.2.2.1 while
6、循环结构 (不定次重复循环 ) 1. 语法结构: while 表达式 循环体 end 当表达式中的值为1,执行循环体。,11,例4.2.5: 求1020的和,i=10; sum=0; while (i=20) sum=sum+i; i=i+1; end string=1020的和为:,num2str(sum); disp(string),12,例4.2.6: 求出一个值n,使其n!最大但小于200,k=0; r=1; while r200 k=k+1; r=r*k; disp(k, r); end r=r./k; k=k-1; disp(The ,num2str(k),! is ,num2st
7、r(r),13,2.表达式为矩阵,while 矩阵A 循环体S end 当矩阵中的所有元素都不为零时,才执行循环体中的内容。 如果矩阵是一个空矩阵,认为表达式为0, 将不执行循环体S中的内容。 例4.2.7: var=1 3 5 -1 0 7 8 0; a=; while var a=var.2 end a,14,例4.2.8:用变量的值控制循环,var=1 3 5 -1 0 7 8 0; a=;k=1; while var(k) a=a var(k).2 k=k+1; end,15,4.2.2.2 for循环结构,语法结构: for 指针初值:步长:终值 循环体 end 其中: 指针通常为一
8、个标量。 初值、终值和步长可以是标量,也可以是表达式。 指针的值大于(或小于终值)。for语句循环结束。 语句中的步长可以省略不写,默认的步长值为1。 例4.2.9: 求1020的和 sum=0; for i=10:20 sum=sum+i; end disp(1020的和为:,num2str(sum);,16,例4.2.10: 计算n!,clear all; n=input(n=); res=1; for i=1:n res=res*i; end disp(n=,num2str(n),; n!=,num2str(res),例4.2.11:循环的次数等于矩阵A的列数量 vx=7 3 10 5;
9、1 2 3 4; k=0; for x=vx k=k+1; vy(:,k)=x.2; end k disp(vx;vy),17,例4.2.12:计算一个矩阵中的所有元素的和。,ra=rand(2,3) A=round(10*ra) m, n=size(A); a=0; for i=1:m for j=1:n a=a+A(i,j); end end a,18,例4.2.13:利用rand函数产生5个随机数,然后利用嵌套for循环进行排序,使之从大到小排序。,x=fix(100*rand(1,5); disp(x) n=length(x); for i=1:n-1 for j=i+1:n if x
10、(i)x(j) y=x(i);x(i)=x(j);x(j)=y; end end disp(x) end,19,4.2.3 break语句和continue语句,break语句强迫终止循环。 continue语句能够中断本次的循环体运行,将程序的流程跳转到判断循环条件的语句处,继续下一次的循环。 例4.2.14: break示例 var=1 3 5 -1 0 7 8 0; a=;k=1; while var(k) if var(k)=5 break end a=a var(k).2 k=k+1; end,20,例4.2.15: break示例,i=0;j=0;k=0; for i=1:2 fo
11、r j=1:2 for k=1:2 if (k=2) disp(退出循环); break; end str=sprintf(I=%d,J=%d,K=%d,i,j,k); disp(str); end end end disp(程序运行结束);,21,例4.2.16: continue示例,i=0; for i=1:6 if(i3) continue else str=sprintf(I=%d,i); disp(str); end end str=sprintf(循环结束I=%d,i); disp(str);,22,4.3 脚本文件,脚本文件:由一系列MATLAB指令和命令组成的M文件。 脚本文
12、件顺序依次执行。 例4.3.1:建立一个新文件(命令文件),输入以下10行内容 %An script M-file to produce “flower petal“ plots theta=-pi:0.01:pi; rho(1,:)=2*sin(5*theta).2; %计算三角函数值。 rho(2,:)=3*cos(10*theta).3; rho(3,:)=4*sin(theta).2; rho(4,:)=5*cos(3.5*theta).3; for i=1:4 polar(theta,rho(i,:),r) %绘制不同函数值的极坐标图形 pause end,23,4.4 函数文件,4
13、.4.1 基本结构 例4.4.1:求平均值的函数,给这个文件起名为average.m。 function y=average(x) % AVERAGE Mean of vector elements. % AVERAGE(x), where x is a vector, % is the mean of vector elements. % Non-vector input results in an error. m,n=size(x); if(m=1)|(n=1)|(m=1 % computation 这个函数有一个输入变量、一个输出变量。,24,1函数文件的结构,一个M文件通常包括五部分
14、内容: 函数定义行。函数文件中的第一行。(必须有) H1行。帮助信息的第一行,也就是文件中的第二行。 函数帮助文本。查询该函数的帮助信息时所显式的内容。 函数执行部分。执行函数中的计算、判断等。(必须有) 注释部分。函数执行部分中以符号开头直到该行的结尾 部分的内容。 (1)函数定义行 作用是通知Matlab,这个M文件的内容是一个函数。 function y = average( x ),25,(2) H1行,H1行是表示帮助文本中的第一行。 以符号“”开头。对于函数average来说,H1行为: AVERAGE Mean of vector elements (3)函数帮助文本 在紧挨着H
15、1行下面的行中,输入一行或者多行注释语句。 输入“help 函数文件名”时,可显示出H1行和函数帮助文本。 (4)函数执行部分 函数文件的主体部分。 (5)注释部分 以符号“”开头。,26,2函数文件的命名,文件名称必须以字母开头,由字母、数字和下划线组成。 函数文件必须以“.m”作为文件的后缀。 函数文件的名称和函数定义行中所使用的函数名称应该相同。 如果两个名称不相同,在调用该函数时使用文件名。 例4.4.2 建立一个M文件fact.m, 并且输入以下五行内容。 function f=fact(n) %FACT Factorial %FACT(N) returns the factoria
16、l of N,usually denoted by N! %Put simply,FACT(N) is PROD(1:N) f=prod(1:n); (1) 计算4的阶乘, fact(4) (2) type命令来查看M文件中的内容。type fact (3) help fact,27,4.4.2 输入输出参数,函数有多个输出参数用一对方括号“ ”括起来。 没有输出变量时:将输出变量和等号都省略不写, 或者用一个空的方括号来代替。 如: function myfun(x) function =myfun(x) 所有的输入变量都要用一对圆括号“()”括起来。 不同的输入变量和输出变量之间用“,” 隔开。 在调用函数时,所使用