自学内容网 自学内容网

MATLAB基本语句

MATLAB语言为解释型程序设计语言。在程序中可以出现顺序、选择、循环三种基本控制结构,也可以出现对M-文件的调用(相当于对外部过程的调用)

由于 MATLAB开始是用FORTRAN语言编写、后来用 C语言重写的,故其既有FORTRAN的特征,又在许多语言规则方面与C语言相同。

2.1 顺序结构语句

在顺序结构语句中,包括表达式语句、赋值语句、输入输出语句、空语句等。

2.1.1 表达式语句

格式:

表达式,    %显示表达式值

表达式;    %不显示表达式值

表达式      %显示表达式值

如:

   x + y,

   sin(x);

   –5

最后的表达式值暂保存在变量ans中。

2.1.2 赋值语句

格式:

v = 表达式,    %结果送v并显示v

v = 表达式;    %结果送v不显示v

v = 表达式      %结果送v并显示v

2.1.3  空语句

格式:

 

 

2.1.4  输入语句

1input语句(实际上是函数)

格式1

input(提示字符串)

功能:

显示提示字符串,可输入数字、字符串(两端用单引号括起)、或表达式   

格式2

input(提示字符串,'s'

功能:

显示提示字符串,并把输入视为字符串

2yesinput语句

格式:

yesinput(提示字符串,缺省值,值范围)

功能:

显示提示字符串和缺省值,若只打入回车则以缺省值作为输入值,若输入的值不在指定范围内则认为输入无效,B并等待用户重新输入。

如:

t=yesinput('指定线的颜色',

    'red','red|blue|green')

运行结果如下:

指定线的颜色(red):yellow  %不在值内

指定线的颜色(red):blue    %重输

t =

   blue

x=yesinput('输入元素个数',10,[1,20])

运行结果如下:

输入元素个数(10):

x =

   10

3Keyboard语句

格式:

Keyboard

功能:

暂停M-文件的执行,并等待用户从键盘输入命令以查看或改变变量的值,直到输入return命令而返回相应的M-文件继续执行。本语句用于调试M-文件。

4pause语句

格式1

pause      

功能:暂停,敲下任一键继续

格式2

pause(n) 

功能:暂停n

格式3

puase on    

功能:本命令后的pause语句有效

格式4

pause off    

功能:本命令后的pause语句无效

5menu语句

格式:

menu('菜单名',S1,S2,,Sk)

功能:生成一个按钮式菜单系统

其中:

字符串S1,S2,,Sk为菜单项(K32)

函数返回值为用户选中的菜单项号。

M-文件,menu_d.m如下:

%选择一种颜色

while 1

  k=menu('选择一种颜色','红色',

    '黄色','兰色','绿色','白色','关闭');

  if   k = = 1  color = 'Red'

    elseif  k = = 2  color = 'Yellow'

    elseif  k = = 3  color = 'Blue'

    elseif  k = = 4  color = 'Green'

    elseif  k = = 5  color = 'White'

    elseif  k = = 6  break

  end

end

2.1.5  输出语句

1、直接终端显示

当一个表达式、赋值语句等语句用逗号或者回车作为结尾符,而不是分号作为结尾符时,该表达式或赋值语句的运行结果均在终端上显示出来。

2diary语句(日记)

格式1

diary  文件名

功能:

打开指定的文件并将该语句之后终端显

示的内容(包括键入的命令和输出结果)记入该文件。

格式2

diary  off

功能:

暂停记入显示内容到指定的文件

格式3

diary  on

功能:

继续记入显示内容到指定的文件

diary语句可产生一个日志文本文件,为以后书写报告或编辑M-文件提供素材。

3.disp 语句

格式:

disp(x)

功能:显示x的值,但不显示x的名

4.sprintf 语句

格式:

[Str,ErrMsg] = SPRINTF(格式串,表达式1,...)

其中:格式串与C语言的规定一致

          Str存放结果的

功能:

按照格式串的规定把各表达式的实部分别转换为字符串并存入 Str,若有错误,则把错误信息存入ErrMsg

如:

sprintf('%0.5g',(1+sqrt(5))/2)          1.618

sprintf('%0.5g',1/eps)                      4.5036e+15       

sprintf('%15.5f',1/eps)                     4503599627370496.00000

sprintf('%d',round(pi))                      3

sprintf('%s','hello')                           hello

sprintf('The array is %dx%d.',2,3)   The array is 2x3.

sprintf('\n')                                        换行

2.1.6变量值的保存与恢复

1、保存工作空间中的变量到文件中

格式1

save  文件名

功能:

保存工作空间中的全体变量到指定文件(扩展名设定为.mat)中。若省略文件名,则文件名缺省为"MATLAB.mat"。该文件为二进制格式,称为MAT文件。

格式2

save  文件名   变量名表 [-append]

功能:

保存指定的变量到文件中。变量名表中两变量之间用逗号或空格分开。

格式3

save  文件名   变量名表  -ascii  [-tabs]

功能:

8位数、ASCII码格式保存指定的变量到文件中。

格式4

save 文件名 变量名表 -ascii –double[-tabs]

功能:

16位数、ASCII码格式保存变量到指定文件中。

2、保存工作空间中的变量到C风格文件中

相关语句(后面详介):

fid=fopen(文件名,权限串)

fwrite(fid,表达式,精度串)%二进制

fprintf(fid,格式,表达式)

fclose(fid)

3、恢复变量到工作空间

格式1

load

功能:

从"MATLAB.mat"文件中恢复变量

格式2

load  文件名

功能:

从指定文件中恢复变量

格式3

load  文件名  -ascii

功能:

从无扩展名的文本文件中生成一个以文件名为变量名的数组(文件中含有m行、n列数据)

格式4

load  文件名.扩展名  -mat

功能:

从具有指定扩展名的MAT文件中恢复变量。

格式5

load  文件名.扩展名

功能:

从具有指定扩展名的文本文件生成与文件名同名的数组(文件中含有m行、n列数据)。

例如:

设文本文件coff.txt中的数据为:

1,2,3,4,5

6,7,8,9,10

执行命令

load  coff.txt

则命令

coff

将显示

coff=

    1  2  3  4  5

  1. 7  8  9  10

格式6:

[A, Count] = fread(fid,size,precision)

[A,Count] = fscanf(fid,format,size)

其中:

precision可为:

 MATLAB    C or Fortran     Description

'uchar'   'unsigned char'  unsigned character,  8 bits.

'schar'   'signed char'    signed character,  8 bits.

'int8'    'integer*1'      integer, 8 bits.

'int16'   'integer*2'      integer, 16 bits.

'int32'   'integer*4'      integer, 32 bits.

'int64'   'integer*8'      integer, 64 bits.

'uint8'   'integer*1'      unsigned integer, 8 bits.

'uint16'  'integer*2'      unsigned integer, 16 bits.

'uint32'  'integer*4'      unsigned integer, 32 bits.

'uint64'  'integer*8'      unsigned integer, 64 bits.

'single'  'real*4'         floating point,

32 bits.

'float32' 'real*4'         floating point,

32 bits.

'double'  'real*8'         floating point,

64 bits.

'float64' 'real*8'         floating point,

64 bits.

功能:

从C风格文件中读入size个数据到ACount为实际读入数据个数

    1. 选择结构

2.2.1 if语句

格式1

if 表达式

语句组  

end

功能:

若表达式值的实部或值为真,则执行语句组

格式2

if  表达式

语句组1

else  

语句组2

end

功能:

若表达式值实部非0或值为真,则执行语句组1,否则执行语句组2

格式3

if  表达式1

语句组1      

elseif  表达式2

语句组2

   

elseif  表达式n

语句组n

else  

  语句组n+1

end

功能:

若表达式1为真则执行语句组1

否则,若表达式2为真则执行语句2

      ┆

否则若表达式n为真则执行语句组n

否则执行语句组n+1

2.2.2 switch语句

格式:

switch  表达式

  case e1 

    语句组1

  case {ex1,ex2,ex3,...}

    语句组2

       ...

  case {exp1,exp2,exp3,...}

    语句组n

  otherwise,

    语句组n+1

end

功能:

若表达式的值为e1则执行语句组1

否则,若表达式的值为ex1,ex2,ex3,…中的一个,则执行语句组2

      

否则,表达式的值为exp1,exp2,exp3,…中的一个,则执行语句组n

否则,则执行语句组n+1

例如:

switch lower(METHOD)

  case {'linear','bilinear'}

     disp('Method is linear')

  case 'cubic'

     disp('Method is cubic')

  case 'nearest'

     disp('Method is nearest')

  otherwise

     disp('Unknown method.')

  end

switch语句是5.0以上版本中增加的,可以用更加简洁的方式描述多向选择

例如:

clear;

%创建元胞数组:a,b,c,d

for i=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;

c=[d,c];

Name={'李洪斌','赵向阳','龚  力','王立伟','马玉书'};

Mark={72,83,56,94,100};Rank=cell(1,5);

%

S=struct('Name',Name,'Marks',Mark,'Rank',Rank);

%

for i=1:5

   switch S(i).Marks

   case 100

      S(i).Rank='满分';

   case a

      S(i).Rank=' 优秀';

   case b    

      S(i).Rank=' 良好';

   case c     

      S(i).Rank=' 及格';

   otherwise  

      S(i).Rank='不及格';

   end

end

%

disp(['学生姓名  ','  得分  ','    等级']);

for i=1:5;

 disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);

end;  

学生姓名    得分      等级

李洪斌      72       及格

赵向阳      83       良好

龚  力      56      不及格

王立伟      94       优秀

马玉书      100      满分  

2.2.3 try语句

格式2

try  

语句组1

catch  

语句组2

end

功能:

执行语句组1,若执行语句组1的过程中发生错误则执行语句组2。可查看lasterr中的内容,获取错误信息。(lasterr('')清除错误信息)

2.2.4 选择语句的嵌套

当以上选择语句出现在另一个选择语句的语句组中时,即构成了选择语句的嵌套。

当选择语句嵌套时,应注意一个if必须与一个距离最近的end匹配。

2.3 循环结构语句

2.3.1   for语句

格式1

for  变量=初值[:增量]:终值

    语句组             %循环体

end

其中:

   "增量"若省略时,增量值取为1

功能:

表示对于变量从初值直到终值,每次变化一个增量的每一个值都执行语句组一次。

如:

for  n = 1:100

  x(n) = sin(npi/100)

end

本格式的for语句用于执行一定次数的循环

格式2

for  变量=数组名

    语句组       %循环体

end

功能:

每次循环时取数组的下一列元素(第一

次循环时取第1列元素)赋给变量(故变量本身成为数组),然后执行语句组,直到数组的全体列都取完为止。

如:

a=[1,5,9;0,–1,1];

for n=a,n(1)–n(2), end

ans =

   1

ans =

   6

ans =

   8

2.3.2   while语句

格式:

while  表达式

语句组

end

当表达式的值为真或其实部为非0,重复执行语句组(循环体),直到表达式的值为0或其实部为0

注意:表达式为数组时全部非0才为真

如:

a=[1,3,5;–1,0,1]; n=0;

while  a>0, n=n+1, end

由于a中含有一个0,故一次循环也未执行。

2.3.3  循环嵌套

在一个循环的循环体内又含有另一个循环结构,即构成循环的嵌套。

2.3.4  break语句

格式:

break

功能:

该语句将中止当前它所在的循环。

如:找出mn之间的全体素数

function u=fq(m,n)

%找出mn的全体素数 fq(m,n)

%若仅有一个参数则m= 2,给出参数作为n

%若没有参数则m = 2n = 100

1999.3

if  nargin == 0,

   m = 2; n = 100;

elseif nargin == 1,

   n = m; m = 2;

end

i=1;

for  t = m:n,

    if t ~= 2;

      for  r = 2:t–1,

        if  fix(t/r)r == t/rr,

           break

        end

      end

      if r==t–1,u(i)=t;i=i+1;end

   else

     u(i)=t;i=i+1;

   end

end

执行fq的运行结果:

ans =

Columns 1 through 12

2    3     5     7    11    13    17    19    23    29    31    37

Columns 13 through 24

41    43    47    53    59    61    67    71    73    79    83    89

Column 25

97

2.4  文件读写函数

1fopen函数

fid = fopen'文件名''权限'

其中:

权限—可为r(只读)、w(只写)、

    ‘a(追加)、rb(二进制文件

    只读)、wb(二进制文件只写)、

    ‘ab(二进制文件追加)、rt(文

    本文件只读)、wt(文本文件只

    写)、at(文本文件追加)。

功能:

函数执行成功,fid中为一整数,表示文件代号;否则为–1

fid规定标准输入为0,标准输出为1,错误信息文件为2

2fclose函数

fclose(fid)

fclose('all')

3fprintf函数

count=fprintf(fid,'格式串',输出名表)

功能:

将输出名表中的成员依次按格式串输出到fid文件中,返回输出的字节数。关于格式串的规定与C相同。如%s(字符串输出)、%d(整数输出)、%10.2f(实数输出,共10个字符宽,含两位小数)等。

4fscanf函数

[变量,count]=fscanf(fid,'格式串',长度)

功能:

从文件fid中读取指定长度(按格式串控制)的数据到变量中,count为读入字节数,若长度省略,表示整个文件。若为[m,n]表示读入一个mn列的矩阵到变量中。

5fread函数

[变量,count] = freadfid,长度)

功能:

fid文件中的二进制数据到变量中,长度含义同fscanf函数。

6fwrite函数

count = fwritefid,变量)

功能:

将变量中的全体元素按二进制形式写入fid文件中。count为成功写入的元素个数。

7fgetl函数与fgets函数

变量= fgetl(fid)

变量= fgets(fid)

功能:

均为从fid中读入一行,但前者读入时不含回车换行,而后者包含回车换行。

还有其它一些函数,请参阅相关书籍。

    1. 一个可运行MATLAB命令的函数

格式:

eval'字符串'

功能:

该函数将执行宏替换:即把字符串看成一个命令(有点类似于C中的System函数)

如:

for  n = 1:3

eval(['M',num2Str(n),'= magic(n)'])

end  

执行后结果为:

M1 =                1阶魔方阵

     1

M2 =                %2阶魔方阵

     1     3

     4     2

M3 =                %3阶魔方阵

     8     1     6

     3     5     7

     4     9     2  

注意:程序中方括号的使用,可把其中各字符子串拼接起来,也可写成:

f = ['M',num2str(n),'magic(n)']);

eval(f)

又如:

m=5;t='1/(i-1+j)';

a = zeros(m);

for  i = 1:m

   for  j = 1:m

     a(i,j) = eval(t);

   end

end

a  

执行后结果为:

a =

    1.0000    0.5000    0.3333    0.2500    0.2000

    0.5000    0.3333    0.2500    0.2000    0.1667

    0.3333    0.2500    0.2000    0.1667    0.1429

    0.2500    0.2000    0.1667    0.1429    0.1250

0.2000    0.1667    0.1429    0.1250    0.1111  

MATLAB中还有其他类似的函数,如:

feval, evalin, assignin, evalc

    1. 局部工作空间和基本工作空间

MATLAB命令窗口中使用的工作空间为基本工作空间,在该窗口中定义的变量、非函数文件中定义的变量以及全局变量均存在于该工作空间中。

各函数文件中所定义的变量仅存在于相应的局部工作空间中,也就是说,一个函数文件执行结束后,其定义的变量也随之消失了。

函数文件之间可以通过输入、输出参数传递信息。也可以通过使用全局变量传递信息。

global  变量名表

该命令使相应变量名表中的变量成为全局变量,出现在各函数中global命令中的相同变量名将取得同一值(即全局变量是按共名原理设计的)。


原文地址:https://blog.csdn.net/m0_38073539/article/details/142367897

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!