1.1. 程序结构

MATLAB有三种常用程序控制结构:顺序结构、选择结构和循环结构。任何复杂程序都可以由这三种基本结构组成。

1.1.1. 顺序结构

顺序结构是MATLAB语言程序的最基本的结构,是指按照程序中的语句排列顺序依次执行,每行语句是从左往右执行,不同行语句是从上往下执行。一般数据的输入和输出、数据的计算和处理程序都是顺序结构。

顺序结构的基本流程如图3-1所示,程序先执行语句A,然后执行语句B,最后执行语句C。

数据的输入

MATLAB语言要从键盘输入数据,用input函数:

(1)x=input('提示信息')

其中提示信息是字符串,用于提示用户输入什么样的数据,等待用户从键盘输入数据,赋值给变量x。

x=input('输入变量 x:')

输入变量 x:3

x = 3

执行该语句时,命令行窗口显示提示信息“输入变量 x:”,然后等待用户从键盘输入x的值。

MATLAB语言要从键盘输入数据,用input函数:

(2)str=input('提示信息','s')

其中该格式用于用户输入一个字符串,赋值给字符变量str。

>>str=input('what ''s your name?','s')
what 's your name?XuGuobao
str =XuGuobao

显示提示信息“what 's your name?”,等待用户从键盘输入字符变量str的值。

数据的输出

MATLAB命令窗口显示输出信息可以用函数disp,该函数调用格式如下:

disp('输出信息’)

其中,输出信息可以是字符串,也可以是矩阵信息。例如:

>>disp('What ''s your name? ')
disp('My name is XuGuobao')
What 's your name? 
My name is XuGuobao
>> A=[1 2;3 4];
>>disp(A)
   1   2
   3   4

需要注意,用disp函数显示矩阵信息将不显示矩阵的变量名,输出格式更紧凑,没有空行。

【例】从键盘输入a、b、和c的值求解一元二次方程的根。

程序代码如下:

a=input('a=');
b=input('b=');
c=input('c=');            %从键盘输入a、b和c的值
delt=b*b-4*a*c;
x1=(-b+sqrt(delt))/(2*a);
x2=(-b-sqrt(delt))/(2*a);
disp(['x1=',num2str(x1)]);     %显示x1和x2的值
disp(['x2=',num2str(x2)]);

程序运行结果是:

>> 
a=1
b=-5
c=6
x1=3
x2=2

1.1.2. 选择结构

MATLAB语言的选择结构是根据选定的条件成立或者不成立,分别执行不同的语句。选择结构有下面三种常用语句:

if语句、switch语句和try语句

  1. if语句

if语句有三种格式。

(1) 单项选择结构

单项选择语句格式如下:

if 条件

语句组

end

当条件成立时,执行语句组,执行完后继续执行end后面的语句,或条件不成立,则直接执行end后面的语句。单项选择程序结构流程图如图3-2所示。

【例】从键盘输入一个值x,判断当x>0时,计算 的值。

程序代码如下

x=input('x:');
if x>0
  y=sqrt(x);
  disp(['y=',num2str(y)]);
end

程序运行结果是:

>>
x:2
y=1.4142

再一次运行程序,输入x=-2,程序结果是:

>> 
x:-2

由上面程序结果可知,当条件不满足时,就直接执行end后面的语句。

(2)双项选择结构

双项选择语句格式如下:

if 条件1

语句组1

else

语句组2

end

当条件1成立时,执行语句组1,否则执行语句组2,完后继续执行end后面的语句。结构流程图如右图所示。

(2)双项选择结构

【例】从键盘输入一个值x,计算下面分段函数的值,并显示。 y={2x+1x>02x1x<0 y = \begin{cases}2x+1 & x>0\\ -2x-1 & x<0\end{cases}

![5](C:\Users\Administrator\gitbook\Modeling\images\5.png)x=input('x:');
if x>0
    y=2*x+1;
disp(['y=',num2str(y)]);
else
    y=-2*x-1
disp(['y=',num2str(y)]);
end
%程序运行结果是:
>> 
x:2
y=5
%当输入x=-2:
>> 
x:-2
y=3

(3)多项选择结构

if 条件1

语句组1

else if 条件2

语句组2

else if条件m

语句组m

else

语句组n

End

当条件1成立时,执行语句组1,否则当条件2成立时,执行语句组2,以此类推,最后执行end后面的语句。

需要注意,if和end必须配对使用。结构流程图如右图所示。

【例】从键盘输入一个值x,用下面分段函数实现符号函数的功能。 y={1x>00x=01x<0 y=\begin{cases}1 &x>0\\0 &x=0\\ -1&x<0\end{cases} 程序代码如下

x=input('x:');
if x>0
  y=1;
  disp(['y=',num2str(y)]);
elseif x==0
  y=0;
  disp(['y=',num2str(y)]);
els
   y=-1;
   disp(['y=',num2str(y)]);
end

程序运行结果是:

>> 
x:3
y=1
>>
x:-3
y=-1
>>
x:0
y=0

%若用符号函数sign验证,可以得到同样的结果:
>>sign(3)
ans =
     1
>>sign(-3)
ans =
    -1
>>sign(0)
ans =
     0

2. switch语句

switch 表达式

case表达式1

语句组**1

case 表达式2

语句组**2

case 表达式m

语句组**m

otherwise

语句组**n

End

当表达式的值等于表达式m的值时,执行语句组m;当表达式的值不等于case所列表达式的值时,执行语句组n。需要注意,当任意一个case表达式为真,执行完语句组,直接执行end后面的语句。

【例】某商场对顾客所购商品总价打折,折扣率标准如下,从键盘输入顾客所购商品总价,计算打折后总价。 {0%price<5005%500price<100010%1000price<200015%2000price<500020%5000price \begin{cases} 0\% & price<500\\ 5\% & 500 \le price<1000\\ 10\% & 1000 \le price <2000 \\ 15\% & 2000 \le price <5000 \\ 20\% & 5000 \le price \end{cases}

price=input('price:');
num=fix(price/500);
switch num
case 0
rate=0;
case 1
rate=5/100;
case {2,3}
rate=10/100;
case num2cell(4:9)
rate=15/100;
otherwise                      
rate=20/100;
end
discount_price=price*(1-rate) 
format shortg
>> 
price:499
discount_price =   499
>> 
price:800
discount_price =   760
>> 
price:1800
discount_price =        1620
>> 
price:4800
discount_price =        4080
>> 
price:6000
discount_price =        4800
  • num2cell函数的功能是将数值矩阵转换为单元矩阵。

3. try语句

try

语句组1

catch

语句组2

end

try语句先试探执行语句组1,如果语句组1在执行过程中出错,则将错误信息赋值给系统变量lasterr,并转去执行语句组2。

【例】试用try语句,求函数
y=xsin(x) y=x*sin(x) 的值,自变量的范围:
0xπ 0 \le x \le \pi ,步长为pi/10。

x=0:pi/10:pi;
try
  y=x*sin(x);
catch
  y=x.*sin(x);
end
y
lasterr
>>
y =
   0    0.0971    0.3693    0.7625    1.1951    1.5708    1.7927    1.7791    1.4773    0.8737    0.0000
ans =
% 错误使用  * 
% 内部矩阵维度必须一致。

1.1.3. 循环结构

循环结构是MATLAB语言的一种非常重要的程序结构,是按照给定的条件,重复执行指定的语句。

有循环次数确定的for循环语句和循环次数不确定的while循环语句。

1.for循环语句

for 循环变量=表达式1:表达式2:表达式3

循环体语句

end

注:(1)表达式1为循环变量的初始值, 表达式2为步长,表达式3为终值;

(2)当步长为1时,省略表达式2;

(3)当步长为负值时,初值大于终值;

(4)循环体内不能对循环变量重新设置;

(5)for循环允许嵌套使用;

(6)for和end配套使用,且小写。

【例】利用for循环语句,验证当n等于1000和1000000时,下面式子的值。 y=112+1314+...+(1)n+11n y=1- \frac{1}{2}+\frac{1}{3}-\frac{1}{4}+...+(-1)^{n+1}\frac{1}{n}

n=input('n:');
tic
   sum=0;
for i=1:n
   sum=sum+(-1)^(i+1)/i;
end
sum
toc

程序运行结果如下:

>>
n:1000000
sum =  0.6931
% 时间已过 0.211798 秒。

MATLAB是一种基于矩阵的语言,为了提高程序执行速度,也可以用向量的点运算来代替循环操作。

n=input('n:');
tic
i=1:n; 
f=(-1).^(i+1)./i; 
y=sum(f) 
toc
%程序运行结果:
>>
n:1000000
y =  0.6931
% 时间已过 0.059535 秒。

【例】若一个整数等于它的各个真因子之和,则称该数为完数。利用for双重循环语句,求解[1,10000]之间的所有完数。

程序代码如下:

for n=1:10000
  sum=0;
  for i=1:n/2
    if rem(n,i)==0   %rem函数是求余数,余数为0表示i为真因子
      sum=sum+i;  %求各真因子累加求和
    end
  end
  if n==sum    %判断是否完数
   n
  end
end

程序运行结果如下:

>>
n = 6
n = 28
n = 496
n = 8128

2. while循环语句

while循环语句是MATLAB语言一种重要的程序结构,是在满足条件下重复执行循环体内的语句,循环次数一般是不确定的。

while循环语句的格式如下:

while 条件表达式

循环体语句

end

其中:当条件表达式为真,就执行循环体语句,否则,就结束循环;

while和end匹配使用。

【例】所谓水仙花数是指一个三位数,各位数字之立方和等于该数本身,例如153=1^3+5^3+3^3,所以153是一个水仙数。试用while循环语句编程找出100~999之间所有水仙花数。

程序代码如下:

n=100;
while n<=999;
  n1=fix(n/100);               %求n的百位数字
  n2=fix((n-fix(n/100)*100)/10);  %求n的十位数字
  n3=n-fix(n/10)*10;            %求n的个位数字
  if (n1^3+n2^3+n3^3==n)
    disp(n);    
  end
  n=n+1;
end

程序运行结果如下:

>> 
  153
  370
  371
  407

1.1.4. 程序控制命令

MATLAB语言有许多程序控制命令,主要有pause暂停命令、continue继续命令、break中断命令和return退出命令等。

1. pause命令

pause命令可以使程序运行停止,等待用户按任意键继续,也可设定暂停时间。该命令调用格式如下:

pause   %程序暂停运行,按任意键继续
pause(n)  %程序暂停运行n秒后继续运行

2. continue命令

continue命令一般用于for或while循环语句中,与if语句配套使用,达到跳出本次循环,执行下次循环的目的。

sum=0;
for i=1:5
  sum=sum+i;
  if i<3
    continue %当i<3时,不执行显示sum的值语句
  end
  sum
end

程序运行结果如下:

sum =
           6
sum =
          10
sum =
        15
  1. break命令

break命令与if语句配套使用,终止循环,或跳出最内层循环。

  1. return命令

return命令一般用于直接退出程序,与if语句配套使用。

sum=0;
for i=1:100
  sum=sum+i;
  if sum>90  %当sum>90时,
    break    %终止循环
  end
end
i
sum

程序运行结果如下:

i =  13
sum =  91
clear
clc
n=-2;
if n<0
     disp('n is a negative number')
     return;        %直接退出程序
end
disp('n is a positive number')
程序运行结果如下:
n is a negative number
Copyright © ZHOUWEN all right reserved,powered by GitbookLatest updated: 2023-03-18 23:36:51

results matching ""

    No results matching ""

    results matching ""

      No results matching ""