专栏首页matlab爱好者Matlab 自定义函数初讲

Matlab 自定义函数初讲

“人间四月芳菲尽,新冠疫情始退去”。这段时间过冷水并没有因为宅在家而特别悠闲,相反一个Big project 折磨的过冷水痛不欲生,整日都在思考how do?什么问题呢。过冷水决定将问题分为七章二八回慢慢讲解,想要看完整个项目请持续关注Matlab爱好者公众号。今天先和大家共同学习一下相关基础-函数调用和参数传递。

在Matalb中使用函数可以把一个较大的任务分解为多个较小的任务,我这个Big project就是由个数多到我都不愿意看的一个个子函数构成的。每个子函数完成特定的功能,通过函数的调用完成整个任务。

1.子函数:

(1)在一个M文件中,可以包含一个以上的函数,其中只有一个是主函数,其他的函数都是子函数。

(2)在一个M文件中,子函数必须出现在最上方,其后是子函数,子函数的次序没有任何限制。

(3)子函数不能被其他文件的函数调用,只能被同一文件中函数调用。

(4)同一文件的主函数和子函数变量工作空间相互独立。

案例:编制一个函数,要求输入两个数值后,用第一个子函数求积,第二个子函数求和,再将这两个值求差的绝对值。

function f=jueduicha(x,y)
f=abs(ji(x,y)-he(x,y));
%子函数2
function f1=ji(x,y)
f1=x.*y;
%子函数2
function f2=he(x,y)
f2=x+y;
>> f=jueduicha(2,3)
f =
     1

2.私有函数:

私有函数是指放在private子目录中的M函数文件。

(1)在private目录下的私有函数,只能被其父目录中的M函数文件所调用,而不能和其他目录中的函数调用,对其他目录中额文件私有函数是不可见的,所以私有函数可以和其他目录中下的函数重名,不过过冷书不建议大家重名命名函数,过冷书的Big project 就深受其苦。

(2) 私有函数目录的M脚本文件也不可调用私有函数。

(3) 在函数搜索时,私有函数优于其他Matlab路径上的函数。

以前在过冷水的推文中从来没有和大家讲过局部变量和全局变量这个概念,在引进函数后,就需要注意了。根据变量的作用域不同,可以将Matlab程序的变量分为局部变量和全局变量。

局部变量:局部变量是在函数内部使用的变量,其影响范围只能在本函数内;每个函数运行时都占用独立的函数工作空间,此空间和Maltlab的工作空间是相互独立的,局部变量仅存在于函数的工作空间内。局部变量只在函数执行期间存在,当函数执行完毕时,局部变量就消失。

全局变量:全局变量是可以在不同函数工作空间和Matlab工作空间中共享使用的变量。全局变量在使用时必须用global定义,而且每个共享全局变量的函数和工作空间都必须逐个用global对变量加以定义。

function u=quanju(t)
global X
X=1;
t=t;
u=quanju1(t);
function  u=quanju1(t)
global X
u=X-t;
>> u=quanju(3)
u =
    -2
function u=quanju(t)
global X
X=1;
t=t;
u=quanju1(t);
function  u=quanju1(t)
u=X-t;
u=quanju(3)
未定义函数或变量 'X'。
出错 quanju>quanju1 (line 8)

以上就是全局变量的使用方式,定义后需要再次定义才能识别。这在自写函数中很容易犯错。

Matalb函数调用过程实际上就是参数传递的过程,传递方式为按值传递。

[输出参数1,输出参数2,....]=函数名[输入参数1,输入参数2,....]

1.参数传递规则

在Matlab中函数具有自己的工作空间,函数内变量与外界的唯一联系就是通过函数的输入输出参数。输入参数在函数中的任何变化,都仅在函数内进行,不会传递回去。

function [u,v]=canshu(x,y,z)
u=x*y;
v=x.^z;
>> [u,v]=canshu(1,2,3)
u =
     2
v =
     1

2.函数参数的个数

在Matalb中输入输出函数的个数是可以变化的,用户可以根据参数的个数来编程。

(1)nargin 和nargout 变量,

调用格式:nargin:功能:在函数体内获取实际输入变量的个数。

调用格式:nargout:功能:在函数体内获取实际输出变量的个数。

调用格式:nargin(’fun’):功能:在函数体外获取实际输入变量的个数。

调用格式:nargout(‘fun’):功能:在函数体外获取实际输出变量的个数。

 function c=canshugeshu(a,b)
 if nargin ==1;
     c=a.^2;
 elseif nargin ==2;
     c=a+b;
 end
>> c=canshugeshu(2,3)
c =
     5
>> c=canshugeshu(3)
c =
     9

本期过冷水的讲解就这么多,一点一点通识知识,之后就是实例分析,感兴趣的持续关注Matlab爱好者平台的推文。

本文分享自微信公众号 - matlab爱好者(matlabaihaozhe),作者:过冷水

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • matlab常用函数

    感谢大家关注matlab爱好者,今天给大家介绍一下matlab编程中常用的函数。在聊天栏中回复“005”或“函数”即可快速获取本视频。在腾讯视频搜索“matla...

    matlab爱好者
  • 你了解matlab局部函数吗?

    什么是局部函数呢?局部函数就是在某个局部范围内起作用的函数,超出作用范围,将不能被使用。通过添加局部函数,可以避免创建和管理单独的函数文件,可使代码编写一气呵成...

    matlab爱好者
  • 遗传算法(二)

    在上一节中我给大家讲解了如何安装遗传算法工具箱,并给出了代码,今天我就给大家讲解一下如何使用工具箱,并且讲解一下遗传算法的使用。还是按照上次的代码。

    matlab爱好者
  • 聊一聊编程中的函数

    给定一个数集A,假设其中的元素为x。现对A中的元素x施加对应法则f,记作f(x),得到另一数集B。假设B中的元素为y。则y与x之间的等量关系可以用y=f(x)表...

    算法与编程之美
  • 函数

                                                函数体

    十月梦想
  • 19. 再说函数~那些不得不知道的事儿

    前面的课程中,我们已经对函数有了简单的了解 函数的声明、函数的的调用、函数的参数以及返回值等等

    大牧莫邪
  • Python之函数编程(2)

    在上面的命令中,我们定义一个return_sum()的函数,这个函数返回一个sum的函数,sum函数的作用是求一个可迭代对象的所有元素的和,当我们直接调...

    AsiaYe
  • 都应该了解的Python函数式编程

    “ 函数式编程(Functional Programming)或者函数程序设计,是一种编程范型。”

    周萝卜
  • 详解javascript中的即时函数,内部函数,能重写自身的函数即时函数内部函数返回函数的函数能重写自己的函数小结

    在上篇谈到匿名函数和回调函数的基础上,我们接着介绍javascript中的即时函数,内部函数,返回函数的函数,能重写自身的函数等几种常见的函数类型及使用方法。只...

    desperate633
  • 7.3 函数总结

    (2)如果使用库函数,应该在本文件开头用#include指令将调用有关库函数时所需用到的信息“包含”到本文件夹中来。

    C语言入门到精通

扫码关注云+社区

领取腾讯云代金券