第一讲软件使用练习-MATLAB篇_第1页
第一讲软件使用练习-MATLAB篇_第2页
第一讲软件使用练习-MATLAB篇_第3页
第一讲软件使用练习-MATLAB篇_第4页
第一讲软件使用练习-MATLAB篇_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一讲:软件使用练习-MATLAB篇§1-3 MATLAB编程1-3-1例子例1-54通过M脚本文件,画出下列分段函数所表示的曲面。(1) 编写M脚本文件的步骤点击MATLAB指令窗工具条上的New File图标 ,就可打开如图8.1-1-1所示的MATLAB文件编辑调试器MATLAB Editor/Debugger。其窗口名为untitled ,用户即可在空白窗口中编写程序。图 MATLAB Editor/Debugger 窗口l 比如输入如下一段程序zx81.ma=2;b=2;clf;x=-a:0.2:a;y=-b:0.2:b;for i=1:length(y) for j=1:

2、length(x) if x(j)+y(i)>1 z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2-1.5*x(j); elseif x(j)+y(i)<=-1 z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2+1.5*x(j); else z(i,j)=0.7575*exp(-y(i)2-6.*x(j)2); end endendaxis(-a,a,-b,b,min(min(z),max(max(z);colormap(flipud(winter);surf(x,y,z);l 点击编辑调试器工具条图标 ,在弹出的Wi

3、ndows标准风格的“保存为”对话框中,选择保存文件夹,键入新编文件名(如zx81),点动【保存】键,就完成了文件保存。(2)运行文件l 使zx81.m所在目录成为当前目录,或让该目录处在MATLAB的搜索路径上l 然后运行以下指令,便可得到图形。zx81 图 运行zx81.m得到的图形例1-55通过M函数文件画出上例分段函数的曲面。整个编程步骤和相同。在此演示,如何在zx81.m基础上产生函数文件zx82.m 。l 在编辑调试器中,选择【File:Save As】子菜单,把zx81.m文件“另存为”zx82.m 。l 用下面指令代替原文件的第<1>条指令。function zx8

4、2(a , b)% aDefine the limit of variable x .% bDefine the limit of variable y .l 进行上述修改后,对zx82.m再次实施“保存”操作。l 在MATLAB指令窗中,运行以下指令,就能产生与图8.1-1-2完全相同的图形。zx82(2,2) 1-3-2关系和逻辑运算除了传统的数学运算,MATLAB支持关系和逻辑运算。如果你已经有了一些编程经验,就会对这些运算熟悉。这些操作符和函数的目的是提供求解真/假命题的答案。一个重要的应用是控制基于真/假命题的一系列MATLAB命令(通常在M文件中)的流程,或执行次序。 作为所有关系

5、和逻辑表达式的输入,MATLAB把任何非零数值当作真,把零当作假。所有关系和逻辑表达式的输出,对于真,输出为1;对于假,输出为零。1关系操作符 MATLAB关系操作符包括所有常用的比较。关系操作符说明<小于< =小于或等于>大于> =大于或等于= =等于 =不等于MATLAB关系操作符能用来比较两个同样大小的数组(或矩阵),或用来比较一个数组和一个标量。在后一种情况,标量和数组中的每一个元素相比较,结果是与数组大小一样的0,1矩阵或数组。下面给出几个示例例1-56:» A=1:9, B=9-AA = 1 2 3 4 5 6 7 8 9B = 8 7 6 5 4

6、 3 2 1 0» tf=A>4tf = 0 0 0 0 1 1 1 1 1 找出A中大于4的元素。0出现在A<=4的地方,1出现在A>4的地方。» tf=(A= =B)tf = 0 0 0 0 0 0 0 0 0 找出A中的元素等于B中的元素。注意,=和= =意味着两种不同的事:= = 比较两个变量,当它们相等时返回1,当它们不相等时返回0;在另一方面, = 被用来将运算的结果赋给一个变量。» tf=B-(A>2)tf = 8 7 5 4 3 2 1 0 -1 找出A>2,并从B中减去所求得的结果向量。这个例子说明,由于逻辑运算的输

7、出是1和0的数组,它们也能用在数学运算中。» B=B+(B= =0)*epsB = Columns 1 through 7 8.0000 7.0000 6.0000 5.0000 4.0000 3.0000 2.0000 Columns 8 through 9 1.0000 0.0000 这是一个演示,表明如何用特殊的MATLAB数eps来代替在一个数组中的零元素,eps近似为2.2e-16。这种特殊的表达式在避免被0除时是很有用的。» x=(-3:3)/3x = -1.0000 -0.6667 -0.3333 0 0.3333 0.6667 1.0000» si

8、n(x)./xWarning: Divide by zeroans = 0.8415 0.9276 0.9816 NaN 0.9816 0.9276 0.8415 由于第四个数据是0 ,计算函数sin(x)/x时给出了一个警告。由于sin(0)/0是没定义的,在该处MATLAB结果返回NaN。用eps替代0以后,再试一次,» x=x+(x= =0)*eps;» sin(x)./xans = 0.8415 0.9276 0.9816 1.0000 0.9816 0.9276 0.8415现在sin(x)/x在x=0处给出了正确的极限。2 逻辑操作符 逻辑操作符提供了一种组合或

9、否定关系表达式。MATLAB逻辑操作符包括:逻辑操作符说明&与|或非逻辑操作符用法的一些例子有:» A=1:9;B=9-A;» tf=A>4tf = 0 0 0 0 1 1 1 1 1找出A大于4。» tf=(A>4)tf = 1 1 1 1 0 0 0 0 0对上面的结果取非,也就是1替换0,0替换1。» tf=(A>2)&(A<6)tf = 0 0 1 1 1 0 0 0 0在A大于2与A小于6处返回1。 最后,上面的功能易于产生数组来表示不连续信号,或由多段其他信号所组成的信号。基本想法是,把数组中要保持的那

10、些值与1相乘,所有其他值与0相乘。例如,例1-57:» x=linspace(0, 10, 100); % 产生010之间的100个数y=sin(x) ; % 对每个数计算SIN值z=(y>=0).*y ; % 对Y中>=0的数保持不变,其余取0z=z+0.5*(y<0) ; % 继续对Y中<0的数加上0.5z=(x<=8).*z ; % 继续对Z中坐标8以后的值取0plot(x, z)xlabel(' x '), ylabel(' z=f(x) '), title(' A Discontinuous Signal

11、 ') 图1 不连续信号3 关系与逻辑函数 除了上面的关系与逻辑操作符,MATLAB提供了大量的其他关系与逻辑函数,包括:其 他 关 系 与 逻 辑 函 数xor(x,y)异或运算。x或y非零(真)返回1,x和y都是零(假)或都是非零(真)返回0。any(x)如果在一个向量x中,任何元素是非零,返回1;矩阵x中的每一列有非零元素,返回1。all(x)如果在一个向量x中,所有元素非零,返回1;矩阵x中的每一列所有元素非零,返回1。 除了这些函数,MATLAB还提供了大量的函数,测试特殊值或条件的存在,返回逻辑值。测 试 函 数finite元素有限,返回真值。isempty参量为空,返回真

12、值。isglobal参量是一个全局变量,返回真值。ishold当前绘图保持状态是ON,返回真值。isieee计算机执行IEEE算术运算,返回真值。isinf元素无穷大,返回真值。isletter元素为字母,返回真值。isnan元素为不定值,返回真值。isreal参量无虚部,返回真值。isspace元素为空格字符,返回真值。isstr参量为一个字符串,返回真值。isstudentMATLAB为学生版,返回真值。isunix计算机为UNIX系统,返回真值。isvms计算机为VMS系统,返回真值。 1-3-3 MATLAB控制流1.for循环结构For循环允许一组命令以固定的和预定的次数重复。For

13、循环的一般形式是:for 循环参数 = 初值:步长:终值 ( -数组)语句end在for和end语句之间的语句按数组中的每一列执行一次。在每一次迭代中,循环参数被指定为数组的下一列例1-58:一个简单的for循环示例。for i=1:10; %i依次取1,2,10,.x(i)=i; %对每个i值,重复执行由该指令构成的循环体,end; x %要求显示运行后数组x的值。 x = 1 2 3 4 5 6 7 8 9 10 For循环的其它重要方面是: (1.) For循环不能用For循环内重新赋值循环变量n来终止。» for n=1:10 x(n)=sin(n*pi/10); n=10;

14、 end» xx = Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns 8 through 10 0.5878 0.3090 0.0000 (2). 语句1 :10 是一个标准的MATLAB数组创建语句。在For循环内接受任何有效的MATLAB数组。» data=3 9 45 6; 7 16 -1 5data = 3 9 45 6 7 16 -1 5for n=data x=n(1)-n(2) endx = -4x = -7x = 46x = 1 (3). For循环可按

15、需要嵌套。for n=1:5 for m=5:-1:1 A(n,m)=n2+m2; end disp(n) end 1 2 3 4 5» AA = 2 5 10 17 26 5 8 13 20 29 10 13 18 25 34 17 20 25 32 41 26 29 34 41 50 (4). 当有一个等效的数组方法来解给定的问题时,应避免用For循环。例如,上面的第一个例子可被重写为» n=1:10;» x=sin(n*pi/10)x = Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.951

16、1 0.8090 Columns 8 through 10 0.5878 0.3090 0.0000两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。 (5). 为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。例如,前面所考虑的第一种情况,在For循环内每执行一次命令,变量x的大小增加1。迫使MATLAB每通过一次循环要花费时间对x分配更多的内存。为了消去这个步骤,For循环的例子应重写为»x=zeros(1,10); % preallocated memory for x» for n=1:10 x(n)=sin(n*pi/10

17、); end现在,只有x(n)的值需要改变。2.while循环结构 与For循环以固定次数求一组命令的值相反,While 循环以不定的次数求一组语句的值。While循环的一般形式是: while 关系表达式 语句 end只要在表达式里的所有元素为真,就执行while和end 语句之间的commands。通常,表达式的求值给出一个标量值,但数组值也同样有效。在数组情况下,所得到数组的所有元素必须都为真。例1-59:Fibonacci数组的元素满足Fibonacci 规则: ,;且。现要求该数组中第一个大于10000的元素。a(1)=1;a(2)=1;i=2;while a(i)<=1000

18、0 a(i+1)=a(i-1)+a(i); %当现有的元素仍小于10000时,求解下一个元素。 i=i+1;end;i,a(i), i = 21 ans = 10946 3.if-else-end分支结构很多情况下,命令的序列必须根据关系的检验有条件地执行。在编程语言里,这种逻辑由某种If-Else-End结构来提供。最简单的If-Else-End结构是: if 关系表达式 commands end 如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的commands。If-Else-End结构是: if 关系表达式 commands evaluated if True el

19、se commands evaluated if False end在这里,如果表达式为真,则执行第一组命令;如果表达式是假,则执行第二组命令。 当有三个或更多的选择时,If-Else-End结构采用形式 if关系表达式1 commands evaluated if expression1 is True elseif关系表达式2 commands evaluated if expression2 is True elseif else commands evaluated if no other expression is True end 最后的这种形式,只和所碰到的、与第一个真值表达式相

20、关的命令被执行;接下来的关系表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。例1-60用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。n=100;a=ones(1,n);for i=3:n a(i)=a(i-1)+a(i-2); if a(i)>=10000 a(i), break; %跳出所在的一级循环。 end;end,i ans = 10946i =21 4.switch-case结构例1-61学生的成绩管理,用来演示switch结构的应用。clear;%划分区域:满分(100),优秀(90-99),良好(80-89),

21、及格(60-79),不及格(<60)。for i=1:10;ai=89+i;bi=79+i;ci=69+i;di=59+i;end;c=d,c;Name=' Jack','Marry','Peter',' Rose',' Tom'%元胞数组Mark=72,83,56,94,100;Rank=cell(1,5);%创建一个含5个元素的构架数组S,它有三个域。S=struct('Name',Name,'Marks',Mark,'Rank',Rank);%根据学生的分

22、数,求出相应的等级。for i=1:5 switch S(i).Marks case 100 %得分为100时 S(i).Rank='满分'%列为'满分'等级 case a %得分在90和99之间 S(i).Rank=' 优秀' %列为'优秀'等级 case b %得分在80和89之间 S(i).Rank=' 良好' %列为'良好'等级 case c %得分在60和79之间 S(i).Rank=' 及格' %列为'及格'等级 otherwise %得分低于60。 S(

23、i).Rank='不及格' %列为'不及格'等级 endend%将学生姓名,得分,登记等信息打印出来。disp('学生姓名 ',' 得分 ',' 等级');disp(' ')for i=1:5; disp(S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank);end; 学生姓名 得分 等级 Jack 72 及格Marry 83 良好Peter 56 不及格 Rose 94 优秀 Tom 100 满分 1-3-4脚本文件和函数文件1.

24、脚本文件由命令语句所构成的M-文件,具有以下特点:(1)文件变量名必须以 .m作为扩展名;(2)文件中所涉及变量都是全局变量,在运行过程中,可被当前工作区调用;2.函数文件函数文件具有以下特点: (1)文件变量名必须与函数名相同;(2)文件的第一行形式必须是:function 因变量 = 函数名(自变量)(3)文件中所涉及变量一般是局部变量;(4)在函数M文件中,到第一个非注释行为止的注释行是帮助文本。当需要帮助时,返回该文本。(5)第一行帮助行,名为H1 行,是由lookfor 命令搜索的行。(6)函数可以有零个或更多个输入参量。函数可以有零个或更多个输出参量。(7) 函数可以按少于函数M文

25、件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数M文件中function 语句一开始所规定的数目,则调用时自动返回一个错误。(8) 当函数有一个以上输出变量时,输出变量包含在括号内。例如,V,D = eig(A)。不要把这个句法与等号右边的V,D 相混淆。右边的V,D 是由数组V和D 所组成。例1-62M函数文件示例。circle.mfunction sa = circle(r,s)%CIRCLEplot a circle of radii r in the line specified by s.%r指定半径的数值%s指定线色的字符串%sa圆面积% circle(r)利用蓝实线画半径为 r 的圆周线.% circle(r,s)利用串 s 指定的线色画半径为 r 的圆周线.% sa=circle(r)计算圆面积,并画半径为 r 的蓝色圆面.% sa=circle(r,s)计算圆面积,并画半径为 r 的 s 色圆面.if nargin>2 error('输入变量太多。');end;if nargin=1 s='b'en

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论