Matlab学习入门篇(四)—— 编程基础

时间:2025-03-03 17:38:48

文章目录

  • 一、M文件
    • 1.1m文件的基本内容
      • 1.1.1函数定义行
      • 1.1.2 H1行和Help文本
      • 1.1.3 注释
      • 1.1.4函数体
    • 1.2 函数式M文件
  • 二、流程控制
    • 2.1if语句
      • 2.1.1 if...end
      • 2.1.2 if...else..end
      • 2.1.3 if...elseif...else...end
    • 2.2 switch语句
    • 2.3 循环语句
      • 2.3.1 for循环
      • 2.3.2 while循环
    • 2.4 continue、break、return语句
    • 2.5 常用的人机交互命令
      • 2.5.1输入提示命令Input
      • 2.5.2 pause命令
  • 三、函数
    • 3.1普通函数
    • 3.2 嵌套函数
    • 3.3 匿名函数
  • 四、函数的变量
    • 4.1变量类型
      • 4.1.1局部变量
      • 4.1.2全局变量
      • 4.1.3永久变量
    • 4.2变量的传递
  • 五、函数句柄
    • 5.1函数句柄的创建
    • 5.2 操作函数句柄的常用函数

在matlab中,用户可以直接在命令行中输入命令,以一种交互式的方式来编写程序。此方法适合命令行比较简单,输入比较方便,同时处理问题较少的情况。但需要处理复杂且任意出错的问题时,可以采用 M文件的形式进行编程。

一、M文件

M文件就是将各种处理问题的各种命令融合到一个文件中,该文件以.m为扩展名。
m文件分类:

  • 脚本文件:不需要输入参数,也不需要输出参数,按照指定的顺序执行命令序列,将变量保存在基本Base工作区中。
  • 函数文件:需要接受其他数据为输入参数,并且返回结果,将变量保存在自己单独的工作区中。

1.1m文件的基本内容

m文件内容 说明
函数定义行(只存在于函数文件中) 定义函数名称,定义输入输出变量的数量、顺序
H1行 对程序进行总结说明的一行
Help文本 对程序的详细说明
注释 具体语句的功能注释、说明
函数体 进行实际计算的代码

1.1.1函数定义行

function [out1,out2,...] = funName(in1,in2...)
function funName(in1,in2...) %无返回值

以上是函数定义语法,且保存函数文件时,matlab会默认以函数的名字来保存。

1.1.2 H1行和Help文本

H1行紧跟着函数定义行,用%开始。因为是Help文本的第一行,所以称为H1行;
Help文本时为调用帮助命令而建立的文本,可以是连续多行的注释文本。
通过以下两个命令都可以显示帮助文本:

help filename
lookfor filename

1.1.3 注释

单行注释:%
注释块:%{…}%

1.1.4函数体

函数体是函数与脚本中计算和处理数据的主体,可以包含进行计算和赋值的语句、函数调用、循环和流控制语句,以及注释语句、空行等。使用disp函数显示函数输出结果。

1.2 函数式M文件

此类型的M文件一般需要输入变量,并且有返回结果;也可以不带变量,,第一行是从function关键词开始。默认情况下,函数式M文件中的变量都是局部变量,仅在函数运行期间有效,函数运行结束后,这些变量将从工作区中清除。

average.m
function y = average(x)
% average mean of vector elements.
% average(x),where x is a vector, is the mean vector.
%  input results in an error.
[m,n] = size(x);
if (~((m == 1) || (n == 1)) || (m == 1 && n == 1))
    error('Input must be a vector')
end
y = sum(x)/length(x); %计算平均值

二、流程控制

Matlab的基本程序结构为顺序结构,即代码的执行顺序从上到下。同时matlab也包括判断语句、循环语句和分支语句等。

2.1if语句

在编写程序时,往往需要根据一定的条件进行判断,然后选择执行不同的语句。条件判断语句一般有以下三种使用形式。

2.1.1 if…end

if 表达式
   执行语句
end

例如判断a是否是偶数:

a = 6;
if rem(a,2) == 0
    disp('a是偶数')
end

2.1.2 if…else…end

if 表达式
	表达式1
else
	表达式2
end

2.1.3 if…elseif…else…end

if n < 0
	disp('输入需要是一个正数');
elseif rem(n,2) == 0
	a = n/2;
else
    b = (n+1)/2;
end

2.2 switch语句

switch语句中如果某一个case中的条件语句为true,则其他的case语句将不会再继续执行,程序将直接跳至switch语句结尾。

switch var
	case 1
		disp('1')
	case {2,3 4}
		disp('2 or 3 or 4')
	case 5
		disp('5')
	otherwise
		disp('something else')
end

2.3 循环语句

2.3.1 for循环

语法结构

for 变量=表达式
	执行语句
end

例如:

for a = [2,3,4,5]
	disp(a)
end

2.3.2 while循环

语法结构:

while 表达式
	执行语句
end

在使用while循环时,一定要在执行语句中设置表达式的值为false的情况,以免出现死循环。

i=1;
while i < 10
	x(i) = i^3;
	i = i + 1;
end

2.4 continue、break、return语句

continue:一般与for循环、while循环一起使用,作用是结束此次循环,即跳过本次循环体中未执行的语句,然后进行下一轮循环。
break:通常在循环体或者在判断语句中,使用break语句,可以不必等待循环的自然结束,而可以根据循环的终止条件来跳出循环。
return:使得当前这个调用的函数正常退出。首先对特定条件进行判断,然后根据需要,调用return语句终止当前正在运行的函数。

2.5 常用的人机交互命令

2.5.1输入提示命令Input

input命令用来提示用户从键盘输入数据、字符串或者表达式,并等待输入值。

user_entry = input('prompt')

2.5.2 pause命令

pause命令用于暂时中止程序的运行。
pause:导致M文件停止,等待用户按任意键继续运行;
pause(n):在继续执行前中止执行程序n秒,n可以是任意实数;
pause on:允许后续的pause命令中止程序的运行;
pause off:将保证后续的任何pause或pause(n)语句都不中止程序的运行。

三、函数

3.1普通函数

编写如下一个函数:如果x>0,那么y=2x;如果x=0,则y=0;其他情况y=-x;

function y = f(x)
    if x > 0
        y = 2*x;
    elseif x == 0
        y = 0;
    else
        y = -x;
    end
end

执行测试结果:

>> f(2)
ans =
     4
>> f(-1)
ans =
     1

3.2 嵌套函数

嵌套函数简而言之,就是函数内部再包含了一个或者是多个函数。
例如,名称为 parent 的函数包含名称为 nestedfx 的嵌套函数:

function parent
disp('This is the parent function')
nestedfx

   function nestedfx
      disp('This is the nested function')
   end

end

嵌套函数的调用:

  • 该嵌套函数的直接上一层函数
  • 同一母函数下的同级嵌套函数
  • 任意低级别的函数

嵌套函数可以访问修改它们所在的函数工作区中的变量。这意味着嵌套函数及包含它的函数都可以修改同一变量,不必将该变量作为参数传递。

function parent
x = 5;
z = nestfun;

   function y = nestfun
     y = x + 1;
   end 
z
end

输出结果:

>> f

z =

     6

3.3 匿名函数

匿名函数可以接受多个输入并返回一个输出。它们可能只包含一个可执行语句。
基本格式:

f = @(变量列表)表达式

例如,该匿名函数接受单个输入 x,并显式返回单个输出,即大小与包含平方值的 x 相同的数组:

sqr = @(x) x.^2;

执行结果:

a = sqr(5)
a =
    25

四、函数的变量

4.1变量类型

根据变量作用的工作区划分:局部变量、全局变量和永久变量。

4.1.1局部变量

在函数中,变量默认为局部变量;这些变量存储在该函数独立的工作区中,与其他函数的变量以及主共工作区的变量分开存储。

4.1.2全局变量

全局变量可以在定义该变量的全部工作区中有效。若任何一个函数需要使用去全局变量,则必须首先声明全局变量
语法格式:

global var1 ... varN

4.1.3永久变量

特点:

  • 只能在函数文件内部定义
  • 只有该变量从属的函数能够访问该变量
  • 当函数运行结束时,该变量的值保留在内存中,因此再次调用该函数时,可以再次利用这些变量。
persistent var1 ... varN

4.2变量的传递

nargin:在函数体内,用于获取实际输入变量个数
nargin(fun):获取fun指定函数所定义的输入变量个数
nargout:在函数体内,用于获取实际输出变量个数
nargout(fun):获取fun指定函数所定义的输出变量个数

五、函数句柄

5.1函数句柄的创建

函数句柄是一种表示函数的 MATLAB 数据类型。函数句柄的典型用法是将函数传递给另一个函数。函数句柄可以表示命名函数或匿名函数。要创建函数句柄,请使用 @ 运算符。
例如,创建用于计算表达式 x2 – y2 的匿名函数的句柄:

f = @(x,y) (x.^2 - y.^2)

例如,创建一个指向用于计算平方数的匿名函数的句柄 sqr,并使用其句柄调用该匿名函数:

sqr = @(n) n.^2;
x = sqr(3)
x =

     9

5.2 操作函数句柄的常用函数

函数名 功能描述
functions 返回函数句柄的相关信息
func2str 根据函数句柄创建一个函数名的字符串
str2func 由一个函数名的字符串创建一个函数句柄
isequal 判断两个函数句柄是否为某一相同函数的句柄

例如:调用func2str和str2func函数

>> fhandle = @sin;
func2str(fhandle)
ans =

    'sin'

>> fh = str2func('sin')
fh =

  包含以下值的 function_handle:

    @sin

未完待续。。。