购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.9 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】求一元二次方程 ax 2 + 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

【例2-29】计算分段函数的值。

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-30】判断输入的学生成绩所属的等级: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-31】任意底对数的实现。

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-32】某商场对顾客所购买的商品实行打折销售,标准为:小于200元,没有折扣;200~499元,折扣为5%;500~999元,折扣为8%;1000~2499元,折扣为15%;2500~4999元,折扣为20%;大于等于5000元,折扣为25%。输入所售商品的价格,求其实际销售价格。

p=input('输入商品价格');
switch fix(p/100)
   case {0,1}                   % 小于200
      r=0;
   case {2,3,4}                 % 200~499
      r=5/100;
   case num2cell(5:9)           % 500~999
      r=8/100;
   case num2cell(10:24)         % 1000~2499
      r=15/100;
   case num2cell(25:49)         % 2500~4999
      r=20/100;
   otherwise                    % 大于等于5000
      r=25/100;
end
p=p*(1-r)                       % 输出商品实际销售价格

2.9.5 循环语句

1. for循环语句

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

for  index=初值: 增量: 终值
   语句组A
end

其中,A为循环体。

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

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

>s=0;
for  k=1:100
        s=s+k;
end

【例2-34】计算 061-01

s=0;
for  k=1:100
    s=s+1/2^(k+2);
end

2. for语句的嵌套

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

【例2-35】创建一个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

3. while循环语句

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

   while 表达式
      执行程序块
end

【例2-36】用循环求解最小的 m ,使其满足 061-02ePRIr/XEo4uiqIaasJx5WiTZm/qgBkMZNEr/W+zNWVbTsI3VpZcbbFTbc++FZQNm

s=0;
m=0;
while (s<=100)
    m=m+1;
    s=s+m;
end
点击中间区域
呼出菜单
上一章
目录
下一章
×