MATLAB基础(四)程序设计

                                                                                         顺序结构

顺序结构是指按照程序中语句的排列顺序依次执行,直到程序的最后一个语句。(最简单的一种程序)

1、数据的输入

       从键盘输入数据,则可以使用input函数来进行,

       调用格式为: A = input(提示信息,选项);

       其中提示信息为一个字符串,用于提示用户输入数据。

        例如:从键盘输入A矩阵,可以采用下面的命令来完成

        A = input('输入A矩阵');

        如果在input函数调用时采用’s’选项,则允许用户输入一个字符串。

        例:xm = input('What’’s your name?','s')

2、数据的输出

      命令窗口输出函数主要有disp函数,其调用格式为:

•       disp(输出项)

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

•       A = 'Hello, Tom';

       disp(A)      输出为:Hello, Tom

•      又如:A = [1,2,3;4,5,6;7,8,9];

                   disp(A)

•       输出为:

•                      1  2  3

                      4  5  6

                      7  8  9         %disp函数输出格式更紧凑

4.2  求一元二次方程                                的根。

由于Matlab能进行复数运算,所以不需要判断方程的判别式,

可直接根据求根公式求根。

程序如下:

a = input('a=?');

b = input('b=?');

c = input('c=?');

pause

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))]);

程序输出为:

a=?4

b=?78

c=?54

x1=-0.7188,x2=-18.7812

                                                                    选择结构

选择结构是根据给定的条件成立或不成立,分别执行不同的语句。

Matlab用于实现选择结构的语句有if语句,switch语句和try语句

1. if语句

Matlab中,if语句有3种格式。

(1)单分支if语句

语句格式:

if 条件

    语句组

end

 

(2)双分支if语句

语句格式:

if 条件

    语句组 1

else

    语句组  2

end

当条件成立时,执行语句组1,否则执行语句组2,然后再执行if语句的后续语句。

例4.3 计算分段函数:

程序如下:

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

if x == 10

    y = cos(x+1)+sqrt(x*x+1);

else

    y = x*sqrt(x+sqrt(x));

end

y

也可以用单分支if语句来实现:

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

y = cos(x+1)+sqrt(x*x+1);

if x~=10

    y = x*sqrt(x+sqrt(x));

end

y

(3)多分支if语句

语句格式:

if 条件1

    语句组 1

elseif  条件2

    语句组  2

elseif  条件m

    语句组  m

else

    语句组n

end

  输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应的数值,若为其他字符则原样输出。

  程序如下:

  c = input('请输入一个字符','s');

  if c >='A' & c<='Z'

      disp(setstr(abs(c) + abs('a')-abs('A')));

  elseif c>='a' & c<='z'

      disp(setstr(abs(c)- abs('a') + abs('A')));

  elseif c>='0' & c<='9'

      disp(abs(c)-abs('0'));

  else

      disp(c);

  end

2switch语句

switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式:

switch 表达式

case 表达式1

        语句组1

case 表达式2

        语句组2

case 表达式m

        语句组m

otherwise

         语句组 n

end                                            

switch子句后面的表达式应为一个标量或一个字符串;case子句后面的表达式不仅可以为一个标量或一个字符串,还可以为一个元胞矩阵。

某商场对顾客所购买的商品实行打折销售,标准如下:

price<200                  没有折扣

200<=price<500        3%折扣

500<=price<1000      5%折扣

1000<=price<2500    8%折扣

2500<=price<5000    10%折扣

5000<=price              14%折扣

输入所售商品的价格,求其实际销售价格。

price = input('请输入商品价格');

switch fix(price/100)

    case{0,1}                       %价格小于200

        rate = 0;

    case{2,3,4}

        rate = 3/100;             %价格大于等于200但小于500

    case num2cell(5:9)

        rate = 5/100;              %价格大于等于500但小于1000

     case num2cell(10:24)

        rate = 8/100;              %价格大于等于1000但小于2500

     case num2cell(25:49)

        rate = 10/100;            %价格大于等于2500但小于5000

      otherwise

         rate = 14/100;           %价格大于等于5000

end

price = price*(1-rate)       %输出商品实际销售价格                     num2cell函数是将数值矩阵转化为单元矩阵。

*  fix() 向0方向取整,round()四舍五入取整,floor()向下取整,ceil()向上取整。

 

                                                                          循环结构

循环是指按照给定的条件,重复执行指定的语句,Matlab提供了两种实现循环结构的语句:for语句和while语句。

1for语句

for语句的格式为:

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

•    循环体语句

end

其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3

值为循环变量的终值。步长为1时,表达式2可以省略。

 

已知,  当n=100时,求y的值。

程序如下:

y = 0;n = 100;

for i=1:n

    y = y+1/i/i;

end

y

输出结果为:

y =

      1.6350

2while语句

while语句的一般格式为:

while条件

       循环体语句

end

其执行过程为:

若条件成立,则执行循环体语句,执行后再判断条件是否成立,

如果不成立则跳出循环。

从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们的和。

sum = 0;

n = 0;

x = input('Enter a number(end in 0):');

while(x~=0)

    sum = sum+x;

    n = n+1;

    x = input('Enter a number(end in 0):');

end

if(n>0)

    sum

    mean = sum/n

end

3break语句和continur语句

它们一般与if语句配合使用。

break语句用于终止循环的执行。

当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。

continue语句控制跳过循环体中的某些语句。

当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。

 4.9 [100,200]之间第一个能被21整除的整数。

n程序如下

for n = 100:200

    if rem(n,21)~=0;

       continue

    end

    break

end

n

程序输出结果为:

n =

      105

* 取模mod与取余rem

    

                                                               函数文件

•    函数文件是另一种形式的M文件,每一个函数文件都定义一个函数。Matlab提供的标准函数大部分是由函数文件定义的。

4.3.1 函数文件的基本结构

         函数文件由function语句引导,其基本结构为:

•        function  输出形参表 = 函数名(输入形参表)

           注释说明部分

           函数体语句

        其中,以function开头的一行为引导行,表示该M文件是一个函数文件。当输出形参多于一个时,应该用方括号括起来。

1. 关于函数文件名

    函数文件名通常由函数名再加上扩展名.m组成。

    当函数文件名与函数名不同时,Matlab将忽略函数名而确认文件名,因此调用时使用函数文件名。

2. 关于注释说明部分

    注释说明包括3部分:

    ① 紧随引导行之后以%开头的第一注释行。

        这一行一般包括大写的函数文件名和函数功能简要描述,供lookfor关键词查询和help在线帮助时使用。

    ② 第一注释行及之后连续的注释行。

        通常包括函数输入/输出参数的含义及调用格式说明等信息,构成全部在线帮助文本。

     与在线帮助文本相隔一空行的注释行。

          包括函数文件编写和修改的信息,如作者和版本等。

3、关于return语句

     如果在函数文件中插入了return语句,则执行到该语句就结束函数

     的执行,流程转至调用该函数的位置。通常也不使用return语句。

     5.10 编写函数文件,求半径为r的圆的面积和周长。

     函数文件如下:

     function [s,p] = fcircle(r)

     % FCIRCLE calculate the area and perimeter of a circle of radii r

     % r       圆半径

     % s       圆面积

     % p      圆周长

 

     %2006230日编

     s = pi*r*r;

     p = 2*pi*r;

 

将以上函数文件以文件名fcircle.m保存,然后在命令窗口调用。

[s,p] = fcircle(10)

输出结果是:

s =

      314.1593

p =

      62.8319

采用help命令或lookfor命令可以显示出注释说明部分的内容。

help fcircle

屏幕显示

FCIRCLE calculate the area and perimeter of a circle of radii r

  r       圆半径

•  s       圆面积

•  p       圆周长

 函数调用的一般格式是:

 [输出实参表] = 函数名(输入实参表)

 注意:函数调用时,各实参出现的顺序、个数,应与函数定义时相同。

 例4.11

 利用函数文件,实现直角坐标(x,y)与极坐标(ρ,θ)之间的转换。

    

 函数文件:tran.m:

       function [rho,theta] = tran(x,y)

       rho = sqrt(x*x+y*y);

       theta = atan(y/x);

调用tran.m的命令文件main1.m:

 x = input(‘please input x=:’);

 y = input(‘please input y=:’);

 [rho,the] = tran(x,y);

 rho

 the

                                                                        函数的嵌套调用   

 Matlab中,函数可以嵌套调用,即一个函数可以调用别的函数。一个函数调用自身称为函数的递归调用。

         4.12 利用函数的递归调用,求n!。

         n!本身就是以递归的形式定义的:

 显然,求n!需要求(n-1)!,这时可采用递归调用。

  函数如下:

  function f = factor(n)

 if n<=1

     f = 1;

 else

     f = factor(n-1)*n;  %递归调用求(n-1)!

 end

 

在命令文件中调用该函数文件,求 s = 1!+2!+3!+4!+5!

•   s = 0;

  for i = 1:5

        s = s + factor(i);

  end

  s

•  在命令窗口运行命令文件,结果如下:

•   s =

        153

                                                                         全局变量与局部变量

Matlab中,函数文件中的变量是局部变量

如若干函数中,都把某一变量定义为全局变量,那么这些函数将共用这个变量。

全局变量的作用域是整个Matlab的工作空间,所有函数都可以对它

进行存取和修改。

全局变量用global命令定义,格式为:

 global 变量名

 4.13 全局变量应用示例。

 先建立函数文件wadd.m,该函数将输入的参数加权相加:

 function f = wadd(x,y)                                                                        BETA = 2;

 global ALPHA BETA                                                                           s = wadd(1,2)

 f = ALPHA*x + BETA*y;                                                                      输出为:

 在命令窗口中输入:                                                                              s = 

 global ALPHA BETA                                                                                       5

 ALPHA = 1;

猜你喜欢

转载自blog.csdn.net/qq_36666756/article/details/81976022