写在前面

今天的文,小编私以为赞爆!

鼓掌欢迎新入驻作者!超有意思的干货文!

有才又有(hěn)趣(pí)的灵魂,还不快来看?!!

—— 你的啰嗦小编已上线hhhh

大家好,我是老薛,初来乍到...

我喜欢钢铁侠,也喜欢Matlab。

—— 一位不愿意透露姓名的热心老薛

这次对Matlab的函数进行简单的介绍,如果大家喜欢,后续更新Matlab的其他知识。

伟大的数学家高斯(膜拜中...)

看到这些是不是想起了曾经被数学恐惧支配的日子? 莫慌,这里的函数并不是各种复杂的数学公式,恰恰相反,这里的函数能帮助你省去很多复杂的运算。

而且我相信点开这篇帖子的同学们都是想要好好学习的同学啊!(当然在下学艺不精,有错误欢迎批评指正,希望能和大家共同进步)

那么问题来了,到底什么是函数?

通俗来讲,Matlab中的函数可以理解为一个装有各种道具的宝箱(我一下就想到了《七龙珠》里的万能胶囊),你想切水果,就按部就班取出水果刀,你想用来赶路,就取出飞行汽车。宝箱里的函数都是提前设置好的,你想调用哪个函数,只需要取出来用就可以了~~~

拿mean函数举个例子来说:

当a是一个向量,在Command Window输入:

a = [1 2 3];

按下回车

当a是一个矩阵的时候,输入:

a= [123;456;789]

按下回车

这里的得到的就是矩阵a每一列的平均数,分别是4、5、6;

如果想得到每一行的平均值,输入:

得到:每一行的均值为2、5、8。

函数有很多,在这里我就不一一列举了,大家遇到不会用的可以用help来帮助解决。比如说sprintf大家如果不会可以直接在Command Window里面输入 help sprintf:

大家通过这种方式或者在网上的其他人的讲解学习各种函数的用法~~~

说到这,忍不住手痒的我先去写几行代码~~~

2.1 函数文件

函数,你可以直接在Command Window里面直接使用,但有时我们要输入很多命令,并且需要这些命令一起运行,甚至要自己写一个函数供其他文件使用,那么我们就需要了解函数文件。

点击新建脚本,你可以写两种文件:一种是脚本文件,另一种就是函数文件,函数M文件可以分为主函数、子函数、嵌套函数、私有函数、重载函数和匿名函数。在这里我们只涉及到前三个(其他的我也不会),大家如果想了解可以去参考赵海滨老师的《MATLAB应用大全》。

每个函数M文件都只有一个主函数,主函数的名字通常和函数的名字相同。在函数M文件中,主函数可以对嵌套函数和子函数进行调用。

每个函数M文件都是以function开头,格式一般为:

function 输出形参 = 函数名称(输入形参)

输出形参就是你要输出变量的变量名,如果需要输出多个变量,那么可以用逗号隔开,并且用方括号括起来,比如[A1,A2];输入形参就是你要输入变量的变量名,如果有多个可以用逗号隔开。记得以前学数学,最喜欢老师直接在黑板上把公式写出来,遇到这种讲课方式的老师对于我这个上课常年走神的学渣真是天大的福音啊~

不再多做赘述,我们也直接上代码。

function [a,b] = myFirstCode(x,y)

%此处的a,b就是输出形参;x,y就是输入形参

a = mySub1(x,y);

%myMain就是函数名称,一般也是文件名

b = mySub2(x,y);

function z = mySub1(x,y)

%又一个子函数

function z = mySub2(x,y)

上面的代码主函数可以调用子函数,子函数可被同一文件的子函数或者主函数调用。

咱们来试试在Command Window输入:

写好的函数不能白写啊,我们得让他运行起来!

2.2 在其他文件(脚本文件\函数文件)或者Command Window中调用函数文件

使用函数文件的第一种方式是在其他位置调用函数文件,就像我们上面写过的代码,我们可以再写一个脚本文件或者在Command Window进行调用:

clc;clear;close all;

%get the current working path

CWPath = fileparts(mfilename('fullpath'));

[a,b] = myFirstCode(9,10);

%在这里主函数调用了子函数,得出a = -1;b = 19

2.3 回调函数的简单介绍

回调函数是个好东西,我们了解一下。

看到这幅画面,是不是又想要在求(手)知(贱)的边缘试探...

红包当然是没有了~~

这个故事告诉我们要学好知识,脚踏实地挣钱O(∩_∩)O哈哈~

这个代码逻辑很简单,就是在我们创建好的figure中显示一张图片,再插入一个按钮,点击按钮用第二张图覆盖第一张图,为了让按钮生效就需要用到回调函数。

代码如下:

function y = hongbao(x)

%创建一个figure

hFigure = figure(1);

set(hFigure, 'position',[100 100 800 600]);

%设置figure位置、大小

%再创建一个axes

hAxes = axes('parent',hFigure);

%给axes认个父亲

set(hAxes, 'units','pixels', 'position',[251 151 300 300]);

%设置一下axes的属性

%获取背景图

pngFileName = 'hongbao.png';

imgMatrix_1 = imread(pngFileName);

imshow(imgMatrix_1,'parent',hAxes);

%创建一个按钮,并设置属性

hButton = uicontrol(hFigure, 'Style','Pushbutton', 'position',[350 100 100 30], 'String','红包了解一下');

%设置按钮回调函数

set(hButton, 'Callback',@Fcn_hButton_Click);

function Fcn_hButton_Click(~, ~, ~)

jpgFileName = 'hongbao.jpg';

imgMatrix = imread(jpgFileName);

imshow(imgMatrix, 'parent', hAxes);

大功告成啦!

回调函数还有很多功能,大家在学习的过程中别忘了慢慢摸索~~~

我们在电脑上玩拳皇放技能的时候,有时候会按一个键,有时候会按两个键,有些技能的释放甚至需要长按蓄力。在进行这些操作的时候,我们每次对计算机输入的参数以及计算机输出的参数都是变化的。在Matlab中当然也能实现这些神奇的操作!

nargin的意思简单来说,就是计算机根据nargin收到实参的不同个数通过if或者switch这种判断语句来实现不同的操作。

我们先举个栗子:

function c = biu(a,b)

switch nargin

otherwise c = 0;

这里的意思就是输入变量为一个的时候,那么计算c = a + a(就是输入的这个变量乘2),若输入的变量为两个,c = a + b(所输入两个变量的和)。

nargout同理,我们把上面的代码改一下:

function [c,d] = biu(a,b)

if nargout > 1;

在Command Window中输入

c = biu(2,3)

[c,d] = biu(2,3)

c = 5; d = -1

同理,varargin:

function varlist(varargin)

fprintf('Number of input arguments: %d',nargin)

%显示输入参数的个数

celldisp(varargin)

%显示输入参数的具体信息,varargin是一个元胞数组,展示时,将元胞数组拆分展示

这里如果输入:

varlist(zeros(5),ones(3),'s123')

Number of input arguments:3

ans{1} = 0 0 0 0 0

ans{2} = 1 1 1

varargout就是在函数实现过程中,也是通过判断语句,将产生的结果赋给varargout{1},varargout{2}等。

function varargout=add(a,b,varargin)

if nargin==2

varargout{1}=a+b;

elseif nargin==3

varargout{1}=a+b;

varargout{2}=a+b-varargin{1};

函数的简单介绍就先说到这里,如果大家想要更深入了解可以去看Matlab相关书籍或者自行百度。代码还是要勤加练习才能进步!(我去继续练习了^_^)

图文:薛璟明

编辑:卢偲瑶

「往期精彩内容」