MATLAB使用速成 第五章(MATLAB编程基础)

一、M文件

1、M文件的用途

        利用MATLAB的程序控制功能,可将相关MATLAB命令编成程序存储在一个文件中(M文件),然后在命令窗口中运行该文件,MATLAB就会自动依次执行文件中的命令,直到全部命令执行完毕。

2、M文件介绍

(1)用MATLAB语言编写的程序称为M文件,由若干MATLAB命令组合在一起构成,可以完成某些操作,也可以实现某种算法。M文件以“.m”为扩展名,M文件的命名规则与变量相同。

(2)根据调用方式不同,M文件可分为:

①Script:脚本文件/命令文件(直接输入文件名即可运行)。

②Function:函数文件(供其它M文件调用,通常带输入参数和输出参数)。

(3)M文件中的百分号是注释符,其后跟着的是程序注释。(需要说明的是,format中的百分号是格式控制符而不是注释符)

3、M文件的创建的与编辑

(1)在当前目录新建一个M文件:

①菜单操作(File→New→M-File)。

②命令操作(edit <M文件名>)。

③命令按钮(快捷键)。

(2)打开已有的M文件(操作范围不一定是当前目录):

①菜单操作(File→Open)。

②命令操作(edit <M文件名>)。(当前目录有则打开,当前目录无则创建)

③命令按钮(快捷键)。

④双击目录中的M文件。

4、运行M文件

(1)对于脚本文件,在命令窗口中直接输入M文件的文件名,即可依次运行M文件中的命令;对于函数文件,将会在下面作介绍。

(2)M文件运行所产生的变量都驻留在MATLAB当前工作空间。

(3)M文件必须在当前工作目录下才能运行。

5、脚本文件举例

(1)用mesh绘制半径为3的球:

①新建一个M文件“myprg1.m”,内容如下:

u=[0:pi/60:2*pi]; 
v=[0:pi/60:pi]; 
[U,V]=meshgrid(u,v);
R=3;  
X=R*sin(V).*cos(U);
Y=R*sin(V).*sin(U);  Z=R*cos(V); 
mesh(X,Y,Z);  
axis equal;

②在命令窗口输入myprg1,即可执行该M文件中的命令。

(2)编写M文件,将华氏温度转化为摄氏温度:

①新建一个M文件“f2c.m”,内容如下:

f=input('Please input f:');  %输入华氏温度
c=5*(f-32)/9;
fprintf('c=%g\n',c);

②在命令窗口中输入f2c,即可执行该M文件。

二、简单的输入输出

1、输入

        对于语句“A=input(<提示信息>)”,提示信息是用单引号括起来的字符串(如果提示信息中包含单引号,则用两个连续的单引号表示信息中的一个单引号),input命令要求用户输入一个值赋给A(可以是数或字符串)。

2、输出

(1)对于语句“disp(X)”,执行后将输出变量X的值,X可以是数值、矩阵或字符串。需要注意的是,disp一次只能输出一个变量,复杂的输出必须用合并的方式实现。

(2)对于语句“fprintf(fid,format,variables)”,执行后将variables(输出变量列表,参数数量可以不定)按格式字符串format(要与输出变量一一对应)指定的数据输出格式将变量的值输出到屏幕或指定的文件fid(这里的格式控制和C语言中的printf非常相似,故仅做简要介绍);fid为文件句柄,若缺省则输出到屏幕上。

①格式字符串format:

[1]fprintf命令的格式说明符:

c

字符型

g

浮点数(自动)

d

十进制整数

o

八进制

e

浮点数(科学计数法)

s

字符串

f

浮点数(小数形式)

x/X

十六进制

[2]format中可以使用的转义字符:

\b

退后一格

\t

水平制表符

\f

换页

\\

输出一个反斜杠

\n

换行

’’

输出一个单引号

\r

回车

%%

输出一个百分号

②输出变量为一维矢量时,将对矩阵的所有值重复执行fprintf命令。

③当输出变量为二维矩阵时,将对矩阵按列的顺序重复执行fprintf命令。

3、图形输入

        执行[X,Y] = ginput(n)命令后,用户可在图形窗口中选取n个点,并将选中的点的位置转换为确切的x,y坐标值,每个点的x坐标存放在列向量X中,y坐标存放在列向量Y中。

三、对M文件的操作

1、概述

(1)文件操作是一种重要的输入输出方式,MATLAB提供了一系列输入输出函数,专门用于文件操作。MATLAB中的输入输出函数是以C语言标准库函数中的输入输出函数为基础开发的,所以这些函数与C语言的输入输出函数相类似。

(2)MATLAB文件操作主要有三个步骤:首先打开文件,然后对文件进行读写操作,最后要关闭文件。

2、文件的打开与关闭

(1)打开文件可使用命令fid=fopen(文件名,打开方式),其中文件名用字符串形式表示(可以带路径名)。

①常见的打开方式(针对读写权限和起始位置)有:

'r'

只读,文件必须存在(若不指定打开方式,则默认为只读)

'w'

写文件,若文件已存在则原内容将被覆盖,若文件不存在则新建一个

'a'

在文件末尾添加,文件若不存在则新建一个

'r+'

可读可写,文件必须存在

'w+'

可读可写,若文件已存在则原内容将被覆盖,若文件不存在则新建一个

'a+'

可读可写可添加,文件若不存在则新建一个

②文件有二进制文件(b)和文本文件(t)两种格式,在Windows下,打开文件的默认是二进制格式,如果要以文本方式打开,则必须在打开方式中加上字符't'。

③fid为文件句柄,其它函数可以用它对该文件进行操作(如fprintf)。如果句柄值大于0,则表示文件打开成功;若打开失败,fid的返回值为-1。

④有两个标准代码文件,不需打开就可以直接使用,分别为:fid=1——标准输出文件;fid=2——标准错误文件。

(2)关闭文件可使用命令status=fclose(fid),其中fid为所要关闭的文件的句柄,status为关闭文件的返回代码,若关闭成功则为0,否则为-1。

3、文本文件的读取与写入

(1)文本文件的读取:

①tline=fgetl(fid) ——将文件句柄为fid的文件中的内容全部读入字符串tline中,舍弃文件中的换行符。

②tline=fgets(fid) ——将文件句柄为fid的文件中的内容全部读入字符串tline中,不舍弃文件中的换行符。

③[A,count]=fscanf(fid,format,size) ——将文件句柄为fid的文件中的数据按格式字符串format全部读入A中;count是返回读取数据的个数,为可选项;size为可选项,缺省则为读取整个文件(即默认取值为Inf),若给出,则取值可以是N或[m,n],为N时读取N个数据到一个列向量中,为[m,n]时读取m×n个数据到m×n矩阵中并按列存放。

(2)文本文件的写入:

        使用命令count=fprintf(fid,format,输出变量列表)即可,这里不再赘述。

四、自定义函数

1、函数文件

(1)函数文件的一般格式:

function  <输出形参列表> = <函数名>(<形参列表>)

% 注释说明部分(可选)

<函数体语句>

①第一行为引导行,表示该M文件是函数文件。

②函数名的命名规则与变量名相同(必须以字母开头),另外函数文件名必须与函数名一致。

③当输出形参多于一个时,需要用方括号括起来。

(2)举例:

①将华氏温度转化为摄氏温度的函数文件f2cf.m。(一个输入参数和一个输出参数)

function c = f2cf(f)
c=5*(f-32)/9;
fprintf('c = %g\n',c);

②交换两个变量的值的函数文件myswap.m。(两个输入参数和两个输出参数)

function [a,b] = myswap(x,y)   
a = y;
b = x;

③打印杨辉三角形的函数文件printyh.m。(仅有一个输入参数)

function printyh(n)
yh = 1;  disp(yh); 
if n==1, return; end
yh = [1,1];  disp(yh);
for k = 3 : n
	yh_old = yh;  k2 = ceil(k/2);
	for i = 2 : k2
		yh(i) = yh_old(i-1) + yh_old(i);
	end
	yh(k2+1:k) = yh(k-k2:-1:1); disp(yh);
end

2、函数调用

(1)函数调用的一般格式:<输出实参列表> = <函数名>(<输入实参列表>)

(2)函数调用时,实参的顺序应与函数定义时形参的顺序一致(数量可以不一致);当输出实参多于一个时,需要用方括号括起来。

(3)实参与形参之间的结合是通过值传递实现的。

(4)函数可以嵌套调用,即一个函数可以被其它函数调用。

(5)函数所传递的参数具有可调性(也就是数量不一定固定),MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。

①nargin的使用举例:

% ex4nargin.m
function y = ex4nargin(a,b)
if (nargin==1)     %只有一个输入参数
	y = a;
elseif (nargin==2)  %有两个输入参数
	y = a*b;
end

②nargout的使用举例:

% ex4nargout.m
function [p,q] = ex4nargout(a,b)
if (nargout==1)     %只有一个输出参数
	p = a * b;
elseif (nargout==2)  %有两个输出参数
	p = a + b; 
	q = a - b;
end

3、递归函数

(1)函数可以被它自身调用,此时称为递归调用。

(2)举例:计算n的阶乘的函数文件myfactor.m。

function y = myfactor(n)
if (n<=1)
	y=1;
else
	y=n*myfactor(n-1);
end

4、局部变量与全局变量

(1)函数文件中的变量都是局部的,即一个函数文件中定义的变量不能被另一个函数文件或其它M文件使用,当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即全部被清除。

(2)如果在若干个M文件中都把某个变量定义为全局变量,则这些函数将公共使用这一变量,所有函数都可以对它进行存取和修改操作。

(3)全局变量的定义语句:global <变量名列表>

①变量名列表中的各个变量用空格隔开,不能用逗号。

②在使用全局变量的所有M文件中,都要对其所使用的全局变量进行定义。

(4)程序示例:

①ex4global.m(脚本文件):

global a b
a = 1; b = 3;
y = mysquaresum(a,b);
fprintf(' a=%g, b=%g \n',a,b);
z = myproduct(a,b);
fprintf(' a=%g, b=%g\n',a,b);

②mysquaresum.m(函数文件):

function square_sum = mysquaresum(x,y)
square_sum = x^2 + y^2;  
a = x+y;    %无法改变全局变量a的值

③myproduct.m(函数文件):

function product = myproduct(x,y)
global a
product = x*y; 
a = x+y;   %可以改变全局变量a的值

5、子函数

(1)一个函数文件中可以含有一个或多个函数,其中第一个称为主函数(主函数必须位于文件最前面,且与文件同名),其它函数称为子函数,其它M文件调用函数文件时,实际上调用的是主函数。

(2)子函数同样由function语句引导,不同于主函数的是,子函数只能被主函数和位于同一个函数文件中的其它子函数调用。

(3)调用一个函数时,MATLAB会首先检查该函数是否为一个子函数,子函数调用主函数这种情况是不允许发生的。

(4)除了用global定义的全局变量外,所有函数中的变量都是局部变量,函数之间通过输入、输出参数进行数据传递。

(5)举例:

% ex4subfun.m
function [avg, med] = ex4subfun(x)  % 主函数 
n = length(x);
avg = mean(x, n);
med = median(x, n);

function a = mean(x, n)  % 子函数,计算平均值
a = sum(x)/n;

function m = median(x, n) % 子函数,计算中值
x = sort(x);
if rem(n, 2) == 1
	m = x((n+1)/2);
else
	m = (x(n/2)+x(n/2+1))/2;
end

6、函数句柄

(1)函数句柄可以理解成一个函数的代号或别名,调用函数句柄就等价于调用该函数。

(2)函数句柄的定义格式:<句柄名> = @ <函数名>

7、内联函数和匿名函数

(1)内联函数:

①MATLAB中的内联函数借鉴了C语言中的内联函数(宏函数),使用内联函数可以减少调用的时间和空间开销。

②内联函数的定义格式:<函数名> = inline('<函数表达式>', '<变量1>', '<变量2>',...)

③内联函数的调用方式为“y=f(<数值列表>)”,调用内联函数时,代入的数值列表顺序应与定义时的变量名顺序一致。内联函数的返回值是函数表达式根据输入变量的计算结果。

④由于内联函数是储存于内存中而不是在M文件中,故省去了文件访问的时间,加快了程序的运行速度。

⑤若调用函数时涉及数组运算,则定义函数时也要用数组运算。

(2)匿名函数:

①匿名函数和内联函数类似,也可以让用户编写简单的函数而不需要创建M文件,因此,匿名函数具有inline函数的所有优点,并且效率比inline函数高。

②匿名函数的定义格式:<函数名> = @ (<输入参数列表>)<运算表达式>

③匿名函数的调用方式为“y=f(<数值列表>)”,调用匿名函数时,代入的数值列表顺序应与定义时的变量名顺序一致。匿名函数的返回值是函数表达式根据输入变量的计算结果。

④用其它变量定义匿名函数时,如果其它变量有改变,同时希望匿名函数的定义也随之改变,那么就需要重新定义匿名函数。

⑤若调用函数时涉及数组运算,则定义函数时也需要使用数组运算。

  • 20
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于快速掌握Matlab基础语法,你可以按照以下步骤进行学习: 1. 安装和启动Matlab:首先确保你已经安装了Matlab,并成功启动了它。 2. Matlab的工作环境:了解Matlab的工作环境,包括命令窗口、编辑窗口和工作空间。 3. 基本数学运算:熟悉Matlab中的基本数学运算,如加法、减法、乘法和除法。还有一些常用的数学函数,如sin、cos和sqrt等。 4. 变量和赋值:学习如何在Matlab中创建变量并进行赋值。了解变量的命名规则和一些注意事项。 5. 数组和矩阵操作:掌握Matlab中的数组和矩阵操作,包括创建数组、索引和切片操作、矩阵运算等。 6. 控制流程语句:了解Matlab中的控制流程语句,如条件语句(if-else)、循环语句(for、while)和跳转语句(break、continue)等。 7. 函数和脚本文件:学习如何定义和调用函数,在Matlab中编写脚本文件,并了解函数和脚本文件之间的区别。 8. 图形绘制:掌握Matlab中的图形绘制功能,包括绘制二维和三维图形、设置坐标轴和标签、添加标题等。 9. 文件操作:了解如何在Matlab中读取和写入文件,如文本文件、Excel文件和图像文件等。 10. 调试和错误处理:学习如何调试Matlab程序,并处理可能出现的错误和异常。 以上是一个快速掌握Matlab基础语法的步骤,你可以通过阅读Matlab的官方文档、参考书籍或在线教程来深入学习每个方面。不断练习和实践,才能更好地掌握Matlab基础语法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zevalin爱灰灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值