之四程序设计.ppt
《之四程序设计.ppt》由会员分享,可在线阅读,更多相关《之四程序设计.ppt(42页珍藏版)》请在三一文库上搜索。
1、MATLAB 软件使用简介,之四,程序设计,MATLAB提供了一个完善的程序设计语言环境,使我们能方便地编制复杂的程序,完成各种运算。本节先介绍关系、逻辑运算和条件循环语句等编程的重要手段,然后再介绍MATLAB所特有的M文件。M文件的语法与C语言十分相似,对广大C语言爱好这来说,编写相当容易,一、关系和逻辑运算,1关系运算,MATLAB中的关系运算符为:,=等于; 大于; =大于等于; =不等于。,关系运算是比较二个数之间的关系,若指出的关系成立,则得到逻辑值(结果)为1(表示真),否则为0(表示假),如: A=1:5,B=5:-1:1,A = 1 2 3 4 5,B = 5 4 3 2 1
2、,C=A=4,D=A=B,C = 0 0 0 1 1,D = 0 0 1 0 0,注:关系运算与数值运算可以结合起来,x=(-3:3)/3;x=x+(x=0)*eps; y=sin(x)./x,y = 0.8415 0.9276 0.9816 1.0000 0.9816 0.9276 0.8415,2逻辑运算,MATLAB中的逻辑运算符为:,&与运算;|或运算;非运算。,前二个运算有二个运算对象,形如A&B或A|B第三个逻辑运算只有一个运算对象。运算规则为:,逻辑运算将任何非零元素视为1(真值),逻辑运算也可以作用于矩阵或数组。,a=1:9,b=9-a,a = 1 2 3 4 5 6 7 8
3、9,b = 8 7 6 5 4 3 2 1 0,c=(a4),d=(a=3)&(b6),c = 1 1 1 1 0 0 0 0 0,d = 0 0 0 1 1 1 1 1 1,MATLAB提供了一些关系和逻辑函数,常见的有all和any,用法:,Y=all(x):若x为向量,当所有元素非零时Y=1,否则Y=0;若x 为矩阵,all作用与列元素,Y为列向量。,Y=any(x):若x为向量,当有一个元素非零时Y=1,否则Y=0;若x 为矩阵,any作用与列元素,Y为列向量。,a=1,0,-5,0;-3,0,8,2,b=all(a) , c=any(a),d=all(b),e=any(c),a =
4、1 0 -5 0 -3 0 8 2,b = 1 0 1 0,c = 1 0 1 1,d = 0,e = 1,二、条件和循环语句,条件和循环语句属于控制语句,MATLAB控制语句有个:if,while,for,witch,它们都用end结束。, if语句,if end,if语句的最简单用法是:,如果关系表达式的值为,则执行语句;否则,执行end的后续命令。,if语句的另一种用法是:,if else end,多个选择时还可以用下列结构:,if elseif elseif else end,如果关系表达式的值为,则执行语句;否则(关系表达式值为),执行语句,然后再执行end的后续命令。,如果关系表达
5、式j(j=1,2,n)的值为,则执行语句j,然后执行end的后续命令;否则跳过,不予执行,直至到执行语句n+1, 然后执行end的后续命令。,例如,可以用下列程序得到右图所示的分段函数。,x=-2:0.2:2;n=length(x); for i=1:n if x(i)=0 y(i)=0; elseif x(i)=1 y(i)=x(i); else y(i)=1; end end plot(x,y),for语句,循环语句for的一般形式为:,for: end,步长为时可以省略。对每个参数,语句都重复执行。,注:,当作多次循环时,for 语句可以嵌套使用,如下列程序可以生成Hilbert矩阵。,
6、for I=1:3 for j=1:4 a(I,j)=1/(I+j-1); end end format rat,a = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6,for语句的循环参数可以是任意数组或矩阵,循环参数依次取数组元素的值,或按矩阵的列依次取值。,while语句,循环语句for的循环判别条件通常是对循环次数的判别 。如果不知道循环参数,可用while循环来完成。While语句的判别控制可以是一个逻辑判别语句,因此它的适用范围会更广些。其表达形式为:,while end,关系表达式的值为(真时)时,语句被循环执行,直到关系表达式值为(假
7、时)时终止。如:,n=0;Eps=1; while (1+Eps)1 Eps=Eps/2; n=n+1; end Eps=2*Eps; n,format short e,Eps,n = 53 Eps = 2.2204e-016,这个例子给出了计算MATLAB中特殊常数的eps过程(我们用大写Eps以便与eps相区别)。Eps不断地被2除直到(1+ Eps)1为假时终止。这里要注意的是,MATLAB用16位数来表示数据,因此当Eps接近时它会认为(1+ Eps)1不成立。,MATLAB还提供了跳出循环系统的break语句,遇到此语句立即执行循环end后续语句。如上面计算eps的程序可以改为:,E
8、ps=1; for n=1:100 Eps=Eps/2; if (1+Eps)=1 Eps=2*Eps; break end end n,format short e,Eps,矩阵指数的计算,Expm(A)=I+A+A2/2!+A3/3!+,e=zeros(size(a); f=eye(size(a); k=1; while norm(e+f-e)0 e=e+f; f=a*f/k; k=k+1; end e, k,a=2,3;3,4 e=zeros(size(a); f=eye(size(a); k=1; while norm(e+f-e)0 e=e+f; f=a*f/k; k=k+1; en
9、d e, k,e = 162.7871 224.6754 224.6754 312.5707 k = 38,e=expm(a) e = 162.7871 224.6754 224.6754 312.5707,4 Switch语句,Switch语句根据表达式的值来执行相应语句。用法如下:,switch case value1 case value2 otherwise end,A=1,2,3,4;2,4,6,8; n,m=size(A); switch(m-n); case 0 disp(A是方阵); otherwise disp(A不是方阵); end,A=1,2,3,4;2,4,6,8 1,
10、3,5,7;1,1,1,1; n,m=size(A); switch(m-n); case 0 disp(A是方阵); otherwise disp(A不是方阵); end,A不是方阵,A是方阵,用循环语句生成一个n维向量,要求它的元素满足Fibonacci规则,即向量第k+2个元素满足 ak+2=ak+ak+1,其中k=1,2, ,且a1=1,a2=1,while(1) n=input(输入维数n(n2); if (n2) break; end end,A=1,1; for i=3:n A(i)=A(i-2)+A(i-1); end disp(A=); disp(A);,A=1 1 2 3
11、5 8 13 21 34 55 89 144 233 377 610,三、M文件,为了处理复杂的问题和大量数据,MATLAB提供了M文件以解决此问题。M文件有两种类型:文本M文件和函数M文件。使用文本文件将自动执行一系列命令(相当于DOS中的批处理文件),函数文件提供了MATLAB的外部函数,M文件可用各类文字编辑器或文字处理器建立。,M文件包含了一系列的MATLAB命令,存储在磁盘的某个目录下,M文件可调用其它M文件(包括自己本身)。,M文件也可在WINOWS中File菜单中选择New,再选择Mfile,这时MATLAB将打开一个文本编辑窗口,在此窗口下输入命令和数据。,1文本M文件,一个比
12、较复杂的程序常常反复调用,这时不妨建立一个文本文件把它储存起来,可以随时调用进行计算。M文件必须以m为扩展名。,其一般形式为:,M,如hilblm,ppm等。,值得注意的是,文本M文件中的变量都是全局变量,在执行过程中,文本M文件中的命令可以使用目前工作区中的变量,它所产生的变量也将成为工作区的一部分。,比如我们把生成Hilbert矩阵的程序写成如下的文本M文件:,a=ones(m,n); for I=1:m for j=1:n a(I,j)=1/(I+j-1); end end a=rats(a),命名为Hilbertm,那么当需要一个23 Hilbert矩阵时,可以在MATLAB工作区中进
13、行:,m=2,n=3,Hilbert,a,m = 2 n = 3 a = 1 1/2 1/3 1/2 1/3 1/4,2函数M文件,函数M文件是另一类M文件,我们可根据需要建立自己的函数文件,它能够像库函数一样方便地调用,从而极大地扩展MATLAB的功能。如果对一类特殊问题,建立起许多函数M文件,就能最终形成独立的工具箱。,函数M文件的第一行有特殊要求,其形式必须为:,function =(),其他各行为从自变量计算因变量的语句,并最终将结果赋值于因变量,而这个M文件的文件名必须是m。下面给出一个函数文件的简单例子。,如果我们经常要调用这样的随机矩阵,其每个元素等概率地取从0到9的整数值,就不
14、妨建立如下的函数M文件:,function a=randint(m,n) % FANDINT Randomly generated integral matrix. % randint(m,n) retuns an m-by-n such matrix with entries between 0 and 9 . a=floor(10*rand(m,n);,x=randint(2,3),x = 9 6 8 2 4 7,函数M文件有许多因变量时,要用 将它们括起来。如:建立一个数的平均值和均方差函数,,function mean,stdev=stat(x) % STAT mean and sta
15、ndard deviation % For a vector x , stat(x) returns the mean and standard deviation of x % For a matrix x , stat(x) retuns two row vectors containing , respectively. m,n=size(x); if m=1 m=n; % handle case of a row vector. end mean =sum(x)/m; stdev=sqrt(sum (x.2)/m-mean.2);,x=2,4,-7,0,5,-1 ; xm,xd=sta
16、t(x),xm = 0.5000 xd = 3.9476,function A=Fi(n) A=1,1; for j=3:n A(j)=A(j-2)+A(j-1); end,建立生成Fiobnacci数列函数,A=Fi(10),A = 1 1 2 3 5 8 13 21 34 55,建立生成第n个Fibonacci数,function A=Fib(n) A=1,1; for j=3:n A(j)=A(j-2)+A(j-1); end A=A(n),f=Fib(20),f = 6765,应用举例:,逢山开路(1994年数学建模竞赛试题A),要在一山区修建公路,首先测得一些地点的高程,数据见表1(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计
链接地址:https://www.31doc.com/p-2787348.html