MATLAB 程序设计


前言

今天,主要学习一下使用matlab编写程序,也就是M文件。 matlab的工作台可以实现很多功能语句的编写,但是呢,只能够单条执行一条语句,为了实现一个个模块化的功能,就需要我们想编写其他语言程序一样去编写matlab程序代码,即M文件

一、M文件操作介绍

首先呢,什么是M文件?其实他就是用MATLAB语言编写的程序,他可以大致分为脚本文件和函数文件

脚本文件(Script) :也称命令式M文件,就是命令(或语句)的简单叠加(不存在输入参数和输出参数的问题)。可在命令窗口直接输入文件名运行。当运行脚本文件时,MATLAB就会自动按顺序执行文件中的语句(或命令),这样就可以避免在命令窗口运行许多命令的麻烦和重复性工作,也便于修改

函数文件(Function):用来定义函数,主要解决参数传递和函数调用问题,它的第一条语句以function语句为引导

M文件的创建与打开

1.建立新的M文件

为建立新的M文件,启动M文件编辑器的方法有三种:

1)菜单方式。从Matlab主窗口中选择File->New->M-file命令,出现M文件编辑器窗口。

2)命令方式:在命令窗口输入edit命令。

3)命令按钮方式:单击Matlab主窗口工具栏上的New Script 命令按钮(或者New 命令按钮)

2. 打开已有的M文件

打开已有的M文件有多种方法:

1)在当前目录窗口选中要打开的M文件,双击鼠标左键打开(或点右键,在右键菜单中选择打开、运行或者其它)

2)命令按钮方式:单击Matlab主窗口工具栏上的Open file命令按钮。

3)命令方式:在命令窗口输入命令
edit 文件名

打开已有的文件后,即可对其进行编辑、运行、调试、保存等。

3. 脚本文件的运行:

在该M文件的窗口中点Run按钮,或者在命令窗口中输入该M文件名(test1),就会执行该命令文件,即顺序执行该命令文件中的语句(或命令)

二、输入输出语句

1 输入函数-input

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

其中提示信息为一个字符串,用于提示用户输入什么样的数据
如果在input函数调用时采用 ’ s ’ 选项,则允许用户输入一个字符串

2. 输出函数-display和disp

调用格式为:
disp( 变量或者表达式) 或
display(变量或者表达式)

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

3. 格式化输出函数-fprintf

fprintf函数的使用类似于C语言中printf的功能,其调用格式,输出控制大抵相同

4. pause命令

格式:

pause %暂停程序的执行,等待用户按任意键后再继续运行
pause(n) %等待n秒后继续运行
说明:只要当pause的开关状态处于on时,以上命令才起作用。 pause on %表示其后的pause命令起作用
pause off %表示其后的pause命令不起作用
pause query %查询当前pause命令的状态

三、程序选择结构

1.if 语句

在MATLAB中,if语句有3种格式。

  1. 单分支if语句
> 语句格式为:
>      if  条件表达式
>          语句组
>      end

当条件表达式的值为真(非零)时,则执行if和end之间的语句组;
否则,(不执行if和end之间的语句组),直接执行if语句的后继语句(end后面的语句)

  1. 双分支if语句
语句格式为:
    if  条件表达式
         语句组1
    else
         语句组2
    end

当条件表达式非零时,执行语句组1;否则执行语句组2
语句组1或语句组2执行后,再执行if语句的后继语句(end后面的语句)

  1. 多分支if语句
语句格式为:
if  条件1
        语句组1
elseif  条件2
        语句组2
       ……
elseif  条件n
         语句组n
else
         语句组n+1
end

[例]输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应数的平方,若为其他字符则原样输出

代码如下:

c=input('请输入一个字符','s');
if c>='A' & c<='Z'
    disp(lower(c));
elseif c>='a'& c<='z'
    disp(upper(c));
elseif c>='0'& c<='9'
    disp(str2num(c)^2);
else
    disp(c);
end

2.switch-case结构

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

语句格式为:
switch  表达式
    case  表达式1
        语句块1
    case  表达式2
        语句块2
        ……
    case  表达式n
        语句块n
    otherwise
        语句块n+1
    end

switch子句后面的表达式应为一个标量或一个字符串
case子句后面的表达式不仅可以为一个标量或一个字符串,而且还可以是一个将多个值(标量或字符串)用大括号括起来的单元数组。
如果case子句后面的表达式为一个单元数组,则表达式的值等于该单元数组中的某个元素时,执行相应的语句组。

[例] 通过键盘输入百分制成绩,输出对应的等级(A: 90-100, B: 80-89, C:70-79,D:60~69, E: <60)

n=input('n=');
if n<0 | n>100
    error(‘输入有误!);
else
    i=floor(n/10);
    switch i
  case  {9,10}
      display(‘A’)
  case 8
      display(‘B’)
  case 7
      display(‘C’)
  case 6
      display(‘D’)
  otherwise
      display(‘E’)
  end  %switch
end  % if

3.try-catch结构

格式为:
try   
    语句组1
catch
    语句组2
end

执行时,首先试探性地执行语句组1。
如果在执行语句组1的过程中出错,则将错误信息赋给Matlab预定义变量lasterr后转去执行语句组2(如果执行语句组2时也出错,将终止程序的执行)

[例]矩阵乘法运算要求两矩阵的维数相容,否则会出错。创建一个命令文件,先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。

代码如下:

A=input('请输入A矩阵:')
B=input('请输入B矩阵:')
lasterr('');                 %清除原有的错误信息
try
   C=A*B;
catch
   C=A.*B;
end
C
disp(lasterr)             %显示出错原因

四、程序循环结构

1.for语句

%for 语句的一般格式:
for 循环变量 = 数组
    循环体语句
end

数组为向量或矩阵。执行时依次将数组的各列赋值给循环变量,然后执行循环体语句,直至各列元素处理完毕

%数组元素求和
A=input('A=')
sumA=0;
for x=A
    sumA=sumA+x;
end
 sumA

for语句最常用的形式:

格式:
for  循环变量=初值:增量:终值
    循环体语句
end

[例] 一个整数各位数字的立方和等于这个数本身,则称该数为水仙花数。输出全部三位的水仙花数。

for m=100:999
    m1=fix(m/100);      %求m的百位数
    r1=rem(m,100);       %m的后两位
    m2=fix(r1/10);        %m的十位数
    m3=rem(r1,10);        %m的个位数
    if m1^3+m2^3+m3^3==m
        display(m)
    end
end

2.while语句

while语句的一般格式为:
    while  条件表达式
         循环体语句
    end

若条件表达式为真(非零),则执行循环体语句,否则,跳出循环。每次执行循环体语句后,重新判断条件表达式是否为真(如果为真,则继续执行循环体语句,否则跳出循环)。重复以上过程,直至条件表达式为假(零)时,跳出循环

3.break和continue命令

在执行循环体语句时,当执行到break 命令时,也跳出for循环或while 循环(注意:只跳出break所在的一层循环)

如果在循环体语句中遇到continue 语句,则停止执行剩余的循环体语句,转到下一次循环的开始执行(对于for语句,则给循环体变量赋下个值,对于while语句,则重新进行条件判断,然后再执行循环体语句或退出循环)
`

4.return

return命令是终止当前命令的执行,并且立即返回到上一级调用函数或等待键盘输入命令,可以用来提前结束程序运行

5.keyboard

在MATLAB中,将keyboard命令放置到M文件中将使得程序暂停执行,等待键盘命令。通过提示符K来显示一种特殊状态,只有当用户使用return命令结束输入后控制权才交给程序。在M文件中,对程序的调试和在程序运行中修改变量都会很方便

6.error与warning命令

error('message')  %显示出错信息message,终止程序
errordlg('errorstring','dlgname')   %显示出错信息的对话框,对话框的标题为dlgname
warning('message')  %显示程序出错信息,程序继续运行

五、函数

函数文件的格式

%函数文件由function语句引导,其一般格式为:
function  输出形参表 = 函数名(输入形参表)
 注释说明部分(每行均以%开始)
 函数体语句
(return)

关于函数文件格式的几点说明:
(1)函数说明行:位于函数文件的首行,以function开头。当有多个输出参数时,应该将这些输出参数放在方括号内,并且,输出参数间用逗号或空格隔开。输入形参之间必须以逗号分隔,放在圆括号内(可以0个输入或输出)
(2) 注释说明部分。
 注释说明一般包括三部分内容:
 ① H1注释行:紧随函数说明行之后以%开头的第一注释行(一般包括大写的函数文件名和函数功能的简要描述,供lookfor查询用)。
 ② help text:第一注释行及之后的连续的以%开头的注释行构成整个帮助文本,供help命令查询用。(一般包括函数的功能、使用格式、输入输出参数的说明等)
 ③编写、修改记录:编写者、日期、修改者、日期等,通常和帮助文本区间隔一个空行,每行均以%开头,一般用作软件档案管理。
(3) 函数体:由Matlab的命令或语句组成,对输入进行变换或处理,得到输出。
(4)关于return语句。执行到该语句就结束函数的执行,程序流程转至调用该函数的位置。通常,在函数文件中也可不使用return语句,这时在被调函数执行完成后自动返回。
(5)关于函数文件名:函数文件名必须以字母开始,后跟字母、数字或下划线。通常,函数文件名由函数名加扩展名’.m’组成。函数文件名也可以与函数名不相同。当两者不同时,MATLAB将忽略函数名而确认函数文件名,因此调用时使用函数文件名。

函数的调用格式

函数调用的一般格式为:
[输出实参表] = 函数名(输入实参表)

当没有输出实参时, 简化为:
函数名(输入实参表) 

注意:函数对输入形参变量的一切操作和修改如果不依靠输出形参变量传出的话,将不影响主调函数工作空间和基本工作空间中该变量的值

全局变量与局部变量

声明某个变量为全局变量的格式为: global 变量名
声明某些变量为局部变量的格式为:persistent 变量名

获取输入输出参数信息

nargin(在函数体内使用)调用函数时实际输入参数的个数
nargout(在函数体内使用)调用函数时实际输出变量的个数
inputname(n)(在函数体内使用)给出调用函数时第n个实际参数的变量名。
MSG=nargchk(LOW,HIGH,N)检查N是否在LOW和HIGH之间,如果是,则返回[],否则,返回一个合适的错误信息字符串。
varargin和varargout可以用来实现任意有限个输入参数和输出参数的函数。

注意:在一个函数文件中,可以定义多个函数。其中,第一个函数是主函数,可以在命令窗口或其它M文件中调用它;其它函数均被视为子函数。子函数只能为主函数或同一文件中的其它子函数所调用

函数句柄对象

函数句柄的创建格式:
1)  FUNHANDLE = @函数名
2)  FUNHANDLE =  @(参数)函数表达式

函数句柄的调用:
1)和函数的调用一样
即:[输出参数列表]=函数句柄(输入参数列表)
2)通过函数feval调用,格式为:
[输出参数列表]= feval(函数句柄,输入参数列表)

例如:
f=@sin, f([0 pi/6]) 或者feval(f, [0 pi/6])

g=@(x)exp(-x)+4*x.^3+3*x.^2;

h=@(x,y,z)(x^2+y^2+z^2), 
h0=h(1,1,2)  或者 feval(h,1,1,2)

总结

MATLAB程序设计和其他的语言是类似的,想要掌握程序的编写还需要多打代码多做题,在程序的不断调试,不断修正中会吸取经验,锻炼能力。今天的博客就写到这里吧,明天见

  • 15
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值