参考-atLab3(程序设计).doc_第1页
参考-atLab3(程序设计).doc_第2页
参考-atLab3(程序设计).doc_第3页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

MatLab & 数学建模 第三讲 MatLab程序设计一、 M文件我们前面所介绍在MATLAB所做的运算,是适合于所要计算的算式不太长或是想以交谈式方式做运算,如果要计算的算式很长有数十行或是须要一再执行的算式,则那样的方式就行不通了。MATLAB提供了所谓的 M-file 的方式,可让使用者自行将指令及算式写成巨集程式然后储存成一个特别的文档,其扩展名是m,譬如 picture.m,其中的picture就是文件名称。(1)编写M脚本文件的步骤l 点击MATLAB指令窗工具条上的New File图标 ,就可打开如图所示的MATLAB文件编辑调试器。用户即可在空白窗口中编写程序。输入如下一段程序 (picture.m)x=linspace(0,2*pi,20); y=sin(x); plot(x,y,r+) title(2D plot) 点击编辑调试器工具条图标 ,在弹出的Windows标准风格的“保存为”对话框中,选择保存文件夹,键入新编文件名(如picture),点击【保存】键,就完成了文件保存。(2)运行文件l 使picture.m所在目录成为当前目录(系统默认路径),或让该目录处在MATLAB的搜索路径上.l 然后在指令窗口运行以下指令,便可得到图形。picture 再来看另一个 M-file: area.m 的例子 % 新建M-file, area.m % 计算一个球的体积 r = input(Type radius 输入半径:); Area=pi*r2; volume=(4/3)*pi*r3; fprintf(半径 The radius is %12.5fn,r) fprintf(面积 The area of a circle is %12.5fn,Area) fprintf(体积 The volume of a sphere is %12.5fn,volume)在指令窗口运行指令 area二、 M文件函数一个函数M文件与脚本文件类似之处在于它们都是一个有.m 扩展名的文本文件。如同脚本M文件一样,函数M文件不进入命令窗口,而是由文本编辑器所创建的外部文本文件。一个函数的M文件与脚本文件在通信方面是不同的。函数与MATLAB工作空间之间的通信,只通过传递给它的变量和通过它所创建的输出变量。在函数内中间变量不出现在MATLAB工作空间,或与MATLAB工作空间不交互。一个函数的M文件的第一行把M文件定义为一个函数,并指定它的名字。它与文件名相同,但没有.m 扩展名。它也定义了它的输入和输出变量。M文件函数之间可以互相调用.M文件函数必须遵循以下特定的规则。 1. 函数名和文件名必须相同。例如,函数fliplr 存储在名为fliplr.m 文件中。 2. MATLAB头一次执行一个M文件函数时,它打开相应的文本文件并将命令编辑成存储器的内部表示,以加速执行以后所有的调用。如果函数包含了对其它M文件函数的引用,它们也同样被编译到存储器。普通的脚本M文件不被编译,即使它们是从函数M文件内调用;打开脚本M文件,调用一次就逐行进行注释。 3. 在函数M文件中,到第一个非注释行为止的注释行是帮助文本。当需要帮助时,返回该文本。例如, help fliplr返回上述前八行注释。 4. 第一行帮助行,名为H1 行,是由lookfor 命令搜索的行。 5. 函数可以有零个或更多个输入参量。函数可以有零个或更多个输出参量。 6. 函数可以按少于函数M文件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数M文件中function 语句一开始所规定的数目,则调用时自动返回一个错误。 7. 当函数有一个以上输出变量时,输出变量包含在括号内。例如,V,D = eig(A)。不要把这个句法与等号右边的V,D 相混淆。右边的V,D 是由数组V和D 所组成。 8. 当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。函数工作空间变量nargin 包含输入参量个数;函数工作空间变量nargout 包含输出参量个数。事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量。例: ,计算f(1)f(2)+f2(3)首先建立一个M函数:fun1.mfunction Y= fun1(x)Y=(x3 - 2*x2 + x - 6.3)/(x2 + 0.05*x - 3.14);在指令窗口运行以下指令:fun1(1)*fun1(2)+fun1(3)*fun1(3)ans = -12.6023例:计算阶乘函数 fact.mfunction output = fact(n) if n = 1 output = 1; return; end output = n*fact(n-1); return:通常情况下,当被调函数执行完后,MATLAB会自动地把控制转至主调函数或者指定窗口。如果在被调函数中插入return命令后,可以强制matlab结束执行该函数并把控制转出。Return命令可使正在运行的函数正常退出,返回调用它的函数继续运行,经常用于函数的末尾用来正常结束函数的运行。【例】M函数文件示例。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 nargin2 error(输入宗量太多。);end;if nargin=1 s=b;end;clf;t=0:pi/100:2*pi;x=r*exp(i*t);if nargout=0 plot(x,s);else sa=pi*r*r; fill(real(x),imag(x),s)endaxis(square)三 MATLAB控制流for循环结构For循环允许一组命令以固定的和预定的次数重复。For循环的一般形式是:for x = arraycommandsend在for和end语句之间的commands按数组中的每一列执行一次。【例】 for n=1:10 x(n)=sin(n*pi/10); 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 For循环可按需要嵌套。n=0:1:10;for i=1:11for j=1:11y(i)=sin(n(i);n(j)=n(j)*10;endendy = Columns 1 through 7 0 -0.5064 0.9300 -0.8027 -0.1425 -0.9765 -0.5118 Columns 8 through 11 0.8586 -0.9957 0.9917 0.9287n = 1.0e+012 * Columns 1 through 7 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 Columns 8 through 11 0.7000 0.8000 0.9000 1.0000可以利用break命令跳出for循环【例】一个简单的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 while循环结构与For循环以固定次数求一组命令的值相反,While 循环以不定的次数求一组语句的值。While循环的一般形式是: while expression commands end只要在表达式里的所有元素为真,就执行while和end 语句之间的commands。【例】 num=0;EPS=1; while (1+EPS)1 EPS=EPS/2; num=num+1; end numnum = 53 EPS=2*EPSEPS = 2.2204e-016【例】x = zeros(1,6); % x是一个的零矩阵 i = 1; while i = 6, x(i) = 1/i; i = i+1; end xx =1.0000 0.5000 0.3333 0.2500 0.2000 0.1667可以利用break命令跳出while循环while循环可按需要嵌套。【例】Fibonacci数组的元素满足Fibonacci 规则: ,;且。现要求该数组中第一个大于10000的元素。a(1)=1;a(2)=1;i=2;while a(i)5 cost=(1-20/100)*cost; end costcost = 200假如有两个选择,If-Else-End结构是: if expression commands evaluated if True else commands evaluated if False end在这里,如果表达式为真,则执行第一组命令;如果表达式是假,则执行第二组命令。 当有三个或更多的选择时,If-Else-End结构采用形式 if expression1 commands evaluated if expression1 is True elseif expression2 commands evaluated if expression2 is True elseif expression3 commands evaluated if expression3 is True elseif expression4 commands evaluated if expression4 is True elseif else commands evaluated if no other expression is True end 最后的这种形式,只和所碰到的、与第一个真值表达式相关的命令被执行;接下来的关系表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。【例】if rand(1)0.5disp(i love you)elsedisp(i donot love you)end【例】一个简单的分支结构。cost=10;number=12;if number8 sums=number*0.95*cost;end,sums sums = 114.0000 【例】用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 switch-case-end结构if-else-end语句所对应的是多重判断选择,而有时也会遇到多分支判断选择的问题。MATLAB语言为解决多分支判断选择提供了switch-case语句。swich语句是多分支选择语句,虽然在某些场合switch功能可以由if语句的多层嵌套来完成,但是会使程序变得复杂和难于修改维护,而利用switch语句构造多分支选择时显得更加简单明了、容易理解。switch-case语句的一般表达形式为:switch表达式Case 选择判断值1 选择判断语句1case 选择判断值2 选择判断语句2otherwise 判断执行语句 end与其他的程序设计语言的switch-case语句不同的是,在MATLAB语言中,当其中一个case语句后的条件为真时,switch-case语句不对其后的case语句进行判断,也就是说在MATLAB语言中,即使有多条case判断语句为真,也只执行所遇到的第一条为真的语句。这样就不必像C语言那样,在每条case语句后加上break语句以防止继续执行后面为真的case条件语句。【例】学生的成绩管理,用来演示switch结构的应用。%划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(60)。 N = input(输入分数);switch N case 100 %得分为100时 S =满分;%列为满分等级 case 90 %得分在90和99之间 S = 优秀; %列为优秀等级 case 80 %得分在80和89之间 S = 良好; %列为良好等级 case 60 %得分在60和79之间 S = 及格; %列为及格等级 otherwise %得分低于60。 S =不及格; %列为不及格等级 end disp(S)(此程序不正确!)程序2:N = input(输入分数);N1=fix(N/10);switch N1 case 10 %得分为100时 S =满分;%列为满分等级 case 9 %得分在90和99之间 S = 优秀; %列为优秀等级 case 8 %得分在80和89之间 S = 良好; %列为良好等级 case 6,7 %得分在60和79之间 S = 及格; %列为及格等级 otherwise %得分低于60。 S =不及格; %列为不及格等级 end disp(S) 例: 某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示): price200 没有折扣 200price500 3%折扣 500price1000 5%折扣 1000price2500 8%折扣 2500price1 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(

温馨提示

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

评论

0/150

提交评论