数学实验课件 第5章5.3_第1页
数学实验课件 第5章5.3_第2页
数学实验课件 第5章5.3_第3页
数学实验课件 第5章5.3_第4页
数学实验课件 第5章5.3_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

5.3程序结构

MATLAB语言的程序结构与其他高级语言是一致的,分为顺序结构、分支结构和循环结构.5.3.1顺序结构

顺序结构是最简单的程序结构,在编写好程序后,系统依次按照程序的物理位置顺序执行程序的各条语句,因此,这种程序比较容易编写.但是,由于程序结构比较单一,实现的功能也比较有限.例5.10输入x,y的值,并将它们的值互换后输出.解clear

x=input('pleaseinputx:')

y=input('pleaseinputy:')

z=x;x=y;y=z;

disp(x)

disp(y)5.3.2分支结构

分支结构是根据一定条件选择执行不同的语句,有if分支结构和switch分支结构.

1if分支结构

分为以下三种情况.

格式一:单分支语句

if逻辑表达式

执行语句

end

这种程序结构比较简单,它只有一个判断语句,当表达式为真时就执行if和end之间的语句,否则不执行.格式二:双分支语句if逻辑表达式

执行语句1else

执行语句2end如果逻辑表达式为真,就执行语句1;否则,系统就执行语句2.格式三:多分支语句if逻辑表达式1

执行语句1elseif逻辑表达式2

执行语句2elseif逻辑表达式3

执行语句3……else

执行语句nend

在这种形式中,当运行到程序的某一逻辑表达式为真时,则执行与之有关的语句,此时系统将不再检验其他的逻辑表达式,即系统跳过其余的if-else-end结构.例5.11输入一个百分制成绩,要求输出成绩等级A、B、C、D、E.其中90分~100分为A,80分~89分为B,70分~79分为C,60分~69分以下为E.解命令如下:clears=input('pleaseinputthescore:')ifs>=90&s<=100rank='A';elseifs>=80&s<=89

rank='B';elseifs>=70&s<=79rank='C';elseifs>=60&s<=69rank='D';elseifs>0&s<=59rank='E';elserank='wrongscore'endrank例5.12已知函数,求.解新建函数文件f.m文件,命令如下:functiony=f(x)ifx<0y=x^2;elseifx>=0&&x<2y=exp(x);elsey=log(x);end在命令行窗口分别运行y=f(-1),y=f(1),y=f(4),>>y=f(-1)y=1>>y=f(1)y=2.7183>>y=f(4)y=1.3863得到2switch分支结构switch语句根据变量或表达式的取值不同,分别执行不同的语句.格式为:switch表达式case值1

语句组1case值2

语句组2……case值m

语句组motherwise

语句组m+1end

其中分支条件可以是一个函数、变量或表达式.如果条件1与分支条件匹配就执行语句1,退出循环;否则,检验条件2,如果条件2与分支条件匹配执行语句2,退出循环;否则,检验条件3,…,当所有条件都不与分支条件匹配时就执行最后的语句.注意otherwise是可以省略的.例5.13从键盘输入一个数字,判断它能否被5整除.解MATLAB命令如下:n=input('请输入一个数字n=')switchmod(n,5)case0fprintf('n是5的倍数',n)otherwisefprintf('n不是5的倍数',n)end运行结果为:

请输入一个数字n=36

n=

36

n不是5的倍数例5.14某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用x来表示):输入所售商品的价格,求其实际销售价格.解MATLAB命令如下:clearprice=input('请输入商品价格:');switchfix(price/100)case{0,1}

rate=0;case{2,3,4}rate=3/100;case{5:20}rate=5/100;otherwiserate=10/100;endprice=price*(1-rate)运行结果为:请输入商品价格:1800price=16205.3.3循环结构

循环结构重复执行一组语句,是计算机解决问题的主要手段.1.for循环

for循环变量=初值:步长:终值

循环体

end例5.15求20!.解MATLAB命令如下:clear;r=1;fork=1:20r=r*k;endr运行结果为:r=2.4329e+18可得

例5.16作出分段函数

的图形解MATLAB命令如下:y=[];forx=-4:0.1:4ifx<=0y=[y,sin(x)];endifx>0y=[y,exp(x)-1];endendx=-4:0.1:4;plot(x,y)运行后得到图5-1.图5-1分段函数图形

2.while循环while(条件)循环体end注:while语句一般用于事先不能确定循环次数的情况.

例5.17求Fibonacci数列前100项和S.解MATLAB命令如下:clearF=[];F(1)=1;F(2)=1;i=3;s=F(1)+F(2); whilei<=100F(i)=F(i-1)+F(i-2);s=s+F(i);i=i+1;ends

运行结果为:s=9.2737e+20可得S=9.2737×1020.

例5.18计算.解MATLAB命令如下:clear

s=0;

forn=1:500

s=s+1/n;

end

s运行结果为:

s=

6.7928也可以利用while循环语句得到,命令如下:clear;s=0;n=1;whilen<=500s=s+1/n;n=n+1;ends可得

=6.7928.注:在使用循环语句时,如果不小心陷入了死循环,可以使用快捷键Ctrl+C强行中断.5.3.4程序优化技术

MATLAB是解释型语言,计算速度较慢,所以在编程时如何提高程序的运行速度是需要考虑的问题.优化程序运行可采用以下办法1.循环向量化

MATLAB是以矩阵为基础的算法,因此有些循环可直接转换成向量或矩阵运算,可提高程序的执行速度;有些函数内部已经采用了向量化处理,使用这些向量化函数,因而运行效率比较高.例5.19比较循环法和向量法求y=sin(x)在x=[0:.01:100]点处值所花的时间.解MATLAB命令如下:tic%启动秒表计时器来测量性能,函数会记录执行

tic

命令时的内部时间i=0;fort=0:.01:100i=i+1;y(i)=sin(t);%循环法endtoctict=0:.01:100;y=sin(t);%向量法toc%使用

toc

函数显示已用时间

运行结果为:

历时0.004141秒.

历时0.001776秒.可见利用向量法可以节省时间.例5.20将例5.18使用向量化函数提高运行速度.解MATLAB命令如下:cleartic

s=0;

n=1:500;

s=sum(1./n)

toc运行结果为:历时0.000284秒.利用向量化函数能够提高运行速度.

2.预分配内存

利用预分配可减少程序运行时间.一般在程序设计中,经常会涉及到循环重复,每次循环至少会得到一个结果元素(比如y(k)).通过对y预分配,可免去每次增大y的操作,从而大大地减少计算时间.

例5.21预分配内存举例.解MATLAB命令如下:tici=0;y=zeros(1,10000);fort=0:

温馨提示

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

评论

0/150

提交评论