Matlab从0到1 第三章结构化程序与自定义函数

本文主要介绍Matlab脚本程序的编写,常用的命令语句以及功能函数的编写。


matlab的程序流

就像大多数的编程语言,matlab程序的执行也是自上而下的,但是matlab每个定义好的变量都会被存储起来,如果需要更新值,首先要该变量清理:clean var.

控制符

一些流控制符:

块控制符

  1. for : 块语句的执行次数
  2. end : 语句结束符
  3. pause : 暂时停止执行
  4. return : 返回

注意:这里的for的用法和C语言中的for用法不一样,两者都可以理解为次数循环,而matlab中的语法有不同,例如下面给出for的用法:

% 循环次数表达    for 开始次数n1 : 结束次数n2
for i=1:10
% c语言中 for ( i = 1; i<=10; 1++)

条件控制符

  1. if / elseif / else
  2. while
  3. switch / case / otherwise
  4. break
  5. continue

这里的otherwise相当于C语言的switch条件语句中的default

|| if elseif else语句使用:

if condition1
	statement1
elseif condition2 
	statement2
else 
	statement3
end

|| switch语句使用:

switch num 
case num1
	statement1
case num2
	statement2
%...
% 以上case条件均不满足时,执行下列语句
otherwise
	statement
end

|| while语句使用:

while expression
	statement
end

异常控制符

  1. try / catch

使用异常控制符,可使得可能出错代码不影响后面代码的继续执行,也可以检查,排查,解决程序的一些错误。

逻辑运算符

  1. 与 或 非 : && || ~
  2. 不等于 : ~ =

matlab里的非~不同于C语言和Python中的!。另外还有常用的大于,小于,大于等于等运算符与其他编程语言基本类似,这里不多进行论述。

程序块运行

可以使用%%来对程序进行划分多个区块,然后可以分别对块进行运行,做debug使用。

例如:

%%
for i=1:10
	% code here
%%

%%
fir i=1:10
	% code here
%%

如果希望计算程序的运行时间,可以使用tic toc,如下所示:

tic 
for i=1:10
	% code here
end 
toc

Tips: 在matlab编辑器中可以设置断点,选中需要设置断点的代码片段,在编辑器行数区域有一条横线,点击横线即可设置断点。


功能函数

定义函数

基本格式如下:

function y = function_name(x)
% 注释段
% 注释段
...
if conditon
	statements
...
end

函数输出

上面例子中的基本形式可以返回一个输出值,当需要进行多个值的输出时,则使用如下形式:

function [a1 a2 ... an] = function_name(v1 v2 ... vm)
a1 = statement1;
a2 = statement2;
...
an = statementn;
end

常用函数指令

  1. input:请求用户输入全页折叠

语法如下:

x = input(prompt)
%  添加's'属性,返回输入的文本,而不会将输入作为表达式来计算。
str = input(prompt,'s')
  1. isempty:确定数组是否为空

语法如下:

tf = isempty(A)

如果 A 为空数组,tf = isempty(A) 返回逻辑值 1 (true);否则返回逻辑值 0 (false)。空数组至少具有一个大小为零的维度,例如,0×0 或 0×5。

  1. disp:显示变量的值

语法如下:·

% disp(X)
A =  [1 2];
disp(A)
% 返回 1 2

说明
disp(X) 显示变量 X 的值,而不打印变量名称。显示变量的另一种方法是键入它的名称,这种方法会在值前面显示一个前导X =

如果变量包含空数组,则会返回 disp,但不显示任何内容。

另外disp还有一个sao操作,可以在命令行窗口中,通过包含 HTML 超链接代码作为 disp 的输入来显示网页链接。

例如,显示指向 MathWorks® 网站的链接。

X = '<a href = "https://www.mathworks.com">MathWorks Web Site</a>';
disp(X)
  1. num2str:将数字转换为字符数组

语法如下:

s = num2str(A)
s = num2str(A,precision)
s = num2str(A,formatSpec)

precision可以控制数值的有效位数,formatSpec可以控制输出的格式,与C语言的格式化输出用法相似,具体可以在matlab官方文档中查询.

实例:将pi转换为字符向量,并指定最大有效位数为5

s = num2str(pi,3)
% s = '3.1416'

函数内嵌默认变量

1. nargin : 函数参数列表变量数目

可以根据函数不同的变量数目来执行不同的操作。

2. nargout: 函数输出参数数目

nargout 针对当前正在执行的函数,返回该函数调用中指定的函数输出参数的数目。

例如:返回 fun 函数定义中出现的输出数目

nargout(fun)

3. inputname" 函数输入的变量名称

语法:s = inputname(argNumber)

s = inputname(argNumber) 返回与参数编号 argNumber对应的工作区变量名称 s。

实例:显示哪个变量在调用函数

function fun(a,b)
% 获得fun函数第一个参数名称
s = inputname(1);
disp(['First calling var is '''s'''.'])
end
% 在命令行下使用变量x,y调用函数
x = 1;
y = 2;
fun(x,y)
% 返回 First calling var is 'x'.

4. mfilename : 显示当前正在运行代码的文件名

语法:

mfilename
path = mfilename('fullpath')

mfilename 返回一个字符向量,其中包含发生函数调用的文件的名称。而mfilename('fullpath')返回其中进行了调用的文件的完整路径和名称,不包括文件扩展名.

5. varargin:设置可变长度输入函数参数列表

varargin 是函数定义语句中的一个输入变量,允许函数接受任意量的输入参数。

function g=fun(f,varargin)
% 调用fun函数
fun(f,a,b,c)
% 其中 varargin{1}=a,varargin{2}=b,varargin{3}=c             

这里需要注意的是,在matlab中数组元素下标由1开始。

6. varargout:可变长度的输出参数列表

实例:

% 使用varargout表示函数输出结果个数
% 其中函数使用不定长参数
function [out1, varargout] = fun(a,varargin)
if nargin == 1
	varargout{1} =  1;
elseif nargin == 2
	% 多于1个输出时
	varargout{2} = a;
	% 当参数多于1时,varargin就起到作用了
	% 这里varargin{1}访问a变量以后的第一个不定长参数
	varargout{2} = a + varargin{1}; 

函数句柄@

在matlab中@用于定义函数句柄。

函数句柄是matlab的一种数据类型,可以将一个函数功能传递给另一个函数。

例如现在我们有一个add函数,可以进行数值的加法运算,可以使用@符号来为函数创建句柄。

% 定义add函数
function sum = add(a,b,varargin)
if nargin = = 2
	sum = a+b
elseif nargin = = 3
	sum = a + b + varargin{1}
...
end

% 为add函数创建句柄
f = @add;
a = 1;
b = 2;
s = f(a,b)
% 输出 s = 3

当然@的用法还有很多,例如可以创建一个匿名函数:

% 计算算术平方根
sqr = @(n) n.^(-2);
x = sqr(4)
% 输出 x = 2

一般我们会把函数句柄放在统一一个元胞数组或结构化数组中:

% 使用元胞数组收集函数句柄:
C = {@sin, @cos, @tan};
C{2}(pi)
%  输出ans = -1

% 使用结构体数组:
S.a = @sin;  S.b = @cos;  S.c = @tan;
S.a(pi/2)
% 输出ans = 1

等等,元胞数组?结构化数组???这些是个啥儿玩意。
不用担心,在后面的内容中,我还会进行补充,目前可以这样理解,元胞数组类似于python的列表,而结构化数组就是python中字典。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DEROOCE

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

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

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

打赏作者

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

抵扣说明:

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

余额充值