MATLAB程序设计图片处理,《MATLAB图像处理超级学习手册》一一2.9 MATLAB程序设计...

本节书摘来自异步社区出版社《MATLAB图像处理超级学习手册》一书中的第2章,第2.9节,作者:MATLAB技术联盟 , 张岩 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.9 MATLAB程序设计

MATLAB图像处理超级学习手册

在MATLAB中,提供了很多程序流程控制语句,如数据的输入输出、顺序结构、判断语句、分支语句、循环语句以及其他流程控制函数。

2.9.1 数据的输入和输出

MATLAB中提供的用于数据输入和输出的函数分别为input函数和disp函数,下面将对其进行介绍。

1.数据的输入

在MATLAB中,input函数用于实现数据的输入,该函数的调用格式为:

A=input (提示信息,选项)

其中,提示信息是一个字符串,用于提示用户输入什么样的数据。

A=input('A= ')

如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用如下命令:

question = input ('What's your name?', 's')

2.数据的输出

在MATLAB中,disp函数用于实现数据的输出,该函数的调用格式为:

disp(输出项)

其中输出项既可以为字符串,也可以为矩阵。

当用disp函数显示矩阵时,将不显示矩阵的名字,而且其格式更紧密,且不留任何没有意义的空行。

【例2-26】求一元二次方程ax2+bx+c=0的根。

a=input('a=');

b=input('b=');

c=input('c=');

d=b*b-4*a*c;

x=[(-b+sqrt(d))/(2*a), (-b-sqrt(d))/(2*a)]

disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);

2.9.2 顺序结构

顺序结构是最简单的程序结构,系统在编译程序时,按照程序的物理位置顺序执行。这种程序的优点是容易编制,缺点是结构单一、能够实现的功能有限。例如:

>>r=1;

h=1;

s=2*r*pi*h + 2*pi*r^2;

v=pi*r^2*h;

disp('The surface area of the colume is:'),disp(s);

disp('The volume of the colume is:'),disp(v);

运行结果如下:

The surface area of the colume is:

12.5664

The volume of the colume is:

3.1416

2.9.3 判断语句

在MATLAB中,判断语句可以使程序中的一段代码只在满足一定条件时才执行。if与else或elseif连用,偏向于是非选择,当某个逻辑条件满足时执行if后的语句,否则执行else语句。

1.结构为if…end

当程序只有一个判断语句时,可以选择if…end结构,此时程序结构为:

if 表达式

执行程序块

end

只有一个判断语句,其中的表达式为逻辑表达式,当表达式为真时,执行相应的语句,否则,直接跳到下一段语句。语句中的end是决不可少的,没有它,在逻辑表达式为0时,就找不到继续执行程序的入口。

【例2-27】判断输入的两个参数a和b是否都大于0,是则返回“a和b都大于0”,否则不返回,程序最后返回“否”。

>>a=input('a=');

b=input('b=');

if a > 0 & b>0

disp(' a和b都大于0');

end

disp('否');

2.结构为if…else…end

当程序有两个选择时,可以选择 if…else…end 结构, 此时程序结构为:

if 表达式

执行程序块1

else

执行程序块2

end

当判断表达式为真时,执行程序块1,否则执行程序块2。

【例2-28】判断输入的两个参数a和b是否都大于0,是则返回“a和b都大于0”,如果不全大于0,则显示“a和b不全都大于0”。

>>a=input('a=');

b=input('b=');

if a > 0 & b>0

disp(' a和b都大于0');

else

disp(' a和b不全都大于0');

end

下面的例子为分段函数值的计算。

>>x=input('请输入x的值:');

if x<=0

y= (x+sqrt(pi))/exp(3);

else

y=log(x+sqrt(1+x*x))/3;

end

3.结构为if…elseif…else…end

当程序的判断包含多个选择时,可以采用if…elseif…else…end结构,此时程序结构为:

if 表达式1

执行程序块1

elseif 表达式2

执行程序块2

elseif ...

...

...

else

执行程序块

end

其中,可以包含任意多个 elseif 语句。

【例2-29】判断输入学生成绩的所属等级:60以下不合格,60~70中等,70~89良好,90以上优秀。

>>n=input('input the score:')

if n>=0 & n<60

A='不合格'

elseif n>=60 & n<70

A='中等'

elseif n>=70 & n<89

A='良好'

elseif n>=90 &n<100

A='优秀'

else

A='输入错误'

end

2.9.4 分支语句

在MATLAB 中,还提供了的另一种多选择语句,即分支语句。分支语句的结构为:

switch 分支语句

case 条件语句

执行程序块

case {条件语句1, 条件语句2, 条件语句3, ...}

执行程序块

otherwise

执行程序块

end

其中,分支语句为一个变量(数值或者字符串变量),如果该变量的值与某一条件相符,则执行相应的语句,否则,执行 otherwise 后面的语句。在每一个条件中,可以包含一个条件语句,也可以包含多个条件,当包含多个条件时,以单元数组的形式表示条件。

【例2-30】任意底的对数的实现。

>>A=input('底');

B=input('对数值');

switch a

case exp(1)

y = log(B);

case 2

y = log2(B);

case 10

y = log10(B);

otherwise

y = log(B)/log(A);

end

【例2-31】某商场对顾客所购买的商品实行打折销售,标准为:小于200(没有折扣),200~500(5%折扣),500~1 000(8%折扣),1 000~2 500(15%折扣),2 500~5 000(20%折扣),大于等于5 000(25%折扣)。输入所售商品的价格,求其实际销售价格。

>>p=input('输入商品价格');

switch fix(p/100)

case {0,1}           %小于200

r=0;

case {2,3,4}         %200 ~500

r=5/100;

case num2cell(5:9)      % 500~1 000

r=8/100;

case num2cell(10:24)     % 1 000~2 500

r=15/100;

case num2cell(25:49)     % 2 500~5 000

r=20/100;

otherwise           %大于等于5 000

r=25/100;

end

p=p*(1-r)            %输出商品实际销售价格

2.9.5 for循环语句

在MATLAB中,for语句调用的基本格式如下:

for index=初值:增量:终值

语句组A

end

其中,A为循环体。

此语句表示把语句组A反复执行N次。循环次数N(需要预先指定)为:N=1+(终值-初值)/增量。在每次执行时程序中的index的值按“增量”增加。

【例2-32】用循环求解 1+2+…+99+100。

>>s=0;

for k=1:100

s=s+k;

end

56e77dad5e7e625d92edb083ed028ecd.png

>>s=0;

for k=1:100

s=s+1/2^(k+2);

end

2.9.6 for语句的嵌套

for语句的嵌套也称为循环的嵌套,或称为多重循环结构,是指一个循环结构的循环体又包括一个循环结构。

【例2-33】建立一个100阶数组,数组中的每一个元素A(k, n)满足A(k, n)=1/(k+n-1)。

>>for k=1:100

for n=1:100

A(k, n)=1/(k+n-1);

end

end

2.9.7 while循环语句

在MATLAB中,while 语句用于将相同的程序块执行多次(次数不需要预先指定),当条件表达式为真时,执行程序块,直到条件表达式为假。

while 语句的结构为:

while 表达式

执行程序块

end

【例2-34】用循环求解最小的m,使其满足sumlimits_{i = 1}^m {i > 100} 。

>>s=0;

m=0;

while (s<=100)

m=m+1;

s=s+m;

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值