版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 MatLab & 数学建模 第三讲 MatLab程序设计一、 M文件我们前面所介绍在MATLAB所做的运算,是适合于所要计算的算式不太长或是想以交谈式方式做运算,如果要计算的算式很长有数十行或是须要一再执行的算式,则那样的方式就行不通了。MATLAB提供了所谓的 M-file 的方式,可让使用者自行将指令及算式写成巨集程式然后储存成一个特别的文档,其扩展名是m,譬如 picture.m,其中的picture就是文件名称。(1)编写M脚本文件的步骤l 点击MATLAB指令窗工具条上的New File图标 ,就可打开如图所示的MATLAB文件编辑调试器。用户即可在空白窗口中编写程序。输入
2、如下一段程序 (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 的例子 % 新
3、建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文件与脚本文件
4、类似之处在于它们都是一个有.m 扩展名的文本文件。如同脚本M文件一样,函数M文件不进入命令窗口,而是由文本编辑器所创建的外部文本文件。一个函数的M文件与脚本文件在通信方面是不同的。函数与MATLAB工作空间之间的通信,只通过传递给它的变量和通过它所创建的输出变量。在函数中间变量不出现在MATLAB工作空间,或与MATLAB工作空间不交互。一个函数的M文件的第一行把M文件定义为一个函数,并指定它的名字。它与文件名相同,但没有.m 扩展名。它也定义了它的输入和输出变量。M文件函数之间可以互相调用.M文件函数必须遵循以下特定的规则。 1. 函数名和文件名必须相同。例如,函数fliplr 存储在名为f
5、liplr.m 文件中。 2. MATLAB头一次执行一个M文件函数时,它打开相应的文本文件并将命令编辑成存储器的部表示,以加速执行以后所有的调用。如果函数包含了对其它M文件函数的引用,它们也同样被编译到存储器。普通的脚本M文件不被编译,即使它们是从函数M文件调用;打开脚本M文件,调用一次就逐行进行注释。 3. 在函数M文件中,到第一个非注释行为止的注释行是帮助文本。当需要帮助时,返回该文本。例如, » help fliplr返回上述前八行注释。 4. 第一行帮助行,名为H1 行,是由lookfor 命令搜索的行。 5. 函数可以有零个或更多个输入参量。函数可以有零个或更多个输出参量
6、。 6. 函数可以按少于函数M文件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数M文件中function 语句一开始所规定的数目,则调用时自动返回一个错误。 7. 当函数有一个以上输出变量时,输出变量包含在括号。例如,V,D = eig(A)。不要把这个句法与等号右边的V,D 相混淆。右边的V,D 是由数组V和D 所组成。 8. 当调用一个函数时,所用的输入和输出的参量的数目,在函数是规定好的。函数工作空间变量nargin 包含输入参量个数;函数工作空间变量nargout 包含输出参量个数。事实上,这些变量常用来设置缺省输入
7、变量,并决定用户所希望的输出变量。例: ,计算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会
8、自动地把控制转至主调函数或者指定窗口。如果在被调函数中插入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 指定的线色画
9、半径为 r 的圆周线.% sa=circle(r)计算圆面积,并画半径为 r 的蓝色圆面.% sa=circle(r,s)计算圆面积,并画半径为 r 的 s 色圆面.if nargin>2 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循环允
10、许一组命令以固定的和预定的次数重复。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(
11、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
12、循环示例。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+
13、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;wh
14、ile a(i)<=10000 a(i+1)=a(i-1)+a(i); %当现有的元素仍小于10000时,求解下一个元素。 i=i+1;end;i,a(i), i = 21 ans = 10946 if-else-end分支结构很多情况下,命令的序列必须根据关系的检验有条件地执行。在编程语言里,这种逻辑由某种If-Else-End结构来提供。最简单的If-Else-End结构是: if expression commands end 如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的commands【例】» apples=10; » cost=ap
15、ples*25 cost = 250» if apples>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 express
16、ion1 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 最后的这种形式,只和所碰到的、与第一个真值表达式相关的命令被执行;接下来的关
17、系表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。【例】if rand(1)>0.5disp('i love you')elsedisp('i donot love you')end【例】一个简单的分支结构。cost=10;number=12;if number>8 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)
18、+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
19、表达式Case 选择判断值1 选择判断语句1case 选择判断值2 选择判断语句2otherwise 判断执行语句 end与其他的程序设计语言的switch-case语句不同的是,在MATLAB语言中,当其中一个case语句后的条件为真时,switch-case语句不对其后的case语句进行判断,也就是说在MATLAB语言中,即使有多条case判断语句为真,也只执行所遇到的第一条为真的语句。这样就不必像C语言那样,在每条case语句后加上break语句以防止继续执行后面为真的case条件语句。【例】学生的成绩管理,用来演示switch结构的应用。%划分区域:满分(100),优秀(90-99),
20、良好(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 %得分低于6
21、0。 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 ='
22、及格' %列为'及格'等级 otherwise %得分低于60。 S ='不及格' %列为'不及格'等级 end disp(S) 例: 某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示): price<200 没有折扣 200price<500 3%折扣 500price<1000 5%折扣 1000price<2500 8%折扣 2500price<5000 10%折扣5000price 14%折扣输入所售商品的价格,求其实际销售价格。 程序如下:price=input('
23、请输入商品价格');switch fix(price/100) case 0,1 %价格小于200 rate=0; case 2,3,4 %价格大于等于200但小于500 rate=3/100; case num2cell(5:9) %价格大于等于500但小于1000 rate=5/100; case num2cell(10:24) %价格大于等于1000但小于2500 rate=8/100; case num2cell(25:49) %价格大于等于2500但小于5000 rate=10/100; otherwise %价格大于等于5000 rate=14/100;endprice=p
24、rice*(1-rate) %输出商品实际销售价格try-catch结构【例】try-catch结构应用实例。clear,N=4;A=magic(3);%设置3行3列矩阵A。try A_N=A(N,:),%取A的第N行元素catch A_end=A(end,:),%如果取A(N,:)出错,则改取A的最后一行。endlasterr%显示出错原因 A_end = 4 9 2ans = Index exceeds matrix dimensions. 例:tang.ma=2;b=2;x=-a:0.2:a;y=-b:0.2:b;for i=1:length(y) for j=1: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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流系统升级测试日程回复函3篇
- 筑牢友善界限共创和谐校园小学主题班会课件
- 快递物流配送服务质量优化建议函(6篇)
- 远离校园暴力构建平安校园,五年级主题班会课件
- 抵制不良信息守护纯净心灵2年级主题班会课件
- 家长开放日:构建家校共育小学主题班会课件
- 关于返单处理的通知3篇
- 服务合同执行期限变更函7篇范本
- 2026年印刷行业税务筹划确认通知7篇
- 分层作业任务完成保障机制
- 电力工程项目投标文件撰写模板
- GCP汇报课件教学课件
- 平房灭火救援授课课件
- 判决书不公开申请书模板
- GB/T 5780-2025紧固件六角头螺栓C级
- 《施工组织设计专项施工方案资料》铁路客运专线土建工程全套施工组织设计第八章-安全目标和安全保证体系及措施
- 品质部纪律管理办法
- 《四川省信息化项目费用测算标准》(修订征求意见稿)
- T/CBMCA 011-2020瓷质砖背胶
- DB4201-T 704-2024 武汉市党政机关物业管理服务规范
- JT-T-1284-2020低平板半挂车技术规范
评论
0/150
提交评论