Matlab中函数定义方法

Matlab自定义函数的六种方法

n1、函数文件+调用函数(命令)文件:需单独定义一个自定义函数的M文件;

n2、函数文件+子函数:定义一个具有多个自定义函数的M文件;

n3、Inline:无需M文件,直接定义;

n4、匿名函数;

n5、Syms+subs:无需M文件,直接定义;

n6、字符串+subs:无需M文件,直接定义。

------------

1、函数文件+调用函数文件:定义多个M文件

% 调用函数文件:myfile.m

clear

clc

for t=1:10

y=mylfg(t);

fprintf(‘M^(1/3)=%6.4f\n’,t,y);

end

%自定义函数文件:

mylfg.m

function y=mylfg(x) %注意:函数名(mylfg)必须与文件名(mylfg.m)一致

Y=x^(1/3);

注:这种方法要求自定义函数必须单独写一个M文件,不能与调用的命令文件写在同一个M文件中。

2、函数文件+子函数:定义一个具有多个子函数的M文件

%命令文件:funtry2.m

function []=funtry2()

for t=1:10

y=lfg2(t)

fprintf(‘M^(1/3)=%6.4f\n’);

End

function y=lfg2(x)

Y= x^(1/3);

%注:自定义函数文件funtry2.m中可以定义多个子函数function。子函数lfg2只能被主函数和主函数中的其他子函数调用。

注意:函数定义格式

在matlab中应该做成M文件,文件名要和你文件里的function后面的函数名一致,在File新建一个M-file在M-file里编辑函数,其格式为:

function [输出实参表]=函数名(输入实参数)

注释部分

函数体语句

return语句(可以有可以没有)

如果是文件中的子函数,则可以任意取名,也可以在同一个文件中定义多个子函数:

例:function [max,min]=mymainfun(x)  %主函数

n=length(x);

max=mysubfun1(x,n);

min=mysubfun2(x);

function r=mysubfun1(x,n)  %子函数1

x1=sort(x);

r=x1(n);

function r=mysubfun2(x)  %子函数2

x1=sort(x);

r=x1(1);

详细见后文:matlab中同一文件定义子函数的方法

【说明】可以将一个主函数和多个子函数写在一个m文件中,文件名是主函数名,第一个函数是主函数,后面跟的函数都是这个函数中需要调用的子函数或者子子函数。即该文件必须是以function打头的函数文件,不能是前面不是函数,后面跟一串函数。强调一下,前面是命令后面加函数是不行的,必须前面也是函数!前面无参数输入的而是一段命令,直接将这些命令定义为一个无参数的函数就可以了。

3、Inline:无需M文件,直接定义

%inline命令用来定义一个内联函数:f=inline(‘函数表达式’,

‘变量1’,’变量2’,……)。

调用方式:y=f(数值列表)

%注意:代入的数值列表顺序应与inline()定义的变量名顺序一致。

例如:

f=inline(‘x^2+y’,’x’,’y’);

z=f(2,3)

Ans=7

注:这种函数定义方式是将它作为一个内部函数调用。特点是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。缺点是,该方法只能对数值进行代入,不支持符号代入,且对定义后的函数不能进行求导等符号运算。

例:

Clear

Clc

f=’x^2’;

Syms x g;

g=x^2;

h=inline(‘x^2’,’x’);

4. 匿名函数

使用matlab函数句柄操作符@,可以定义指向matlab内置函数和用户自定义函数的函数句柄,函数句柄也可以像函数一样的使用。例如:

>>x=-pi:0.1:pi;

>>

fh={@cos,@sin};

fh =

@cos @sin

>>plot(fh{2}(x))

5、Syms+subs:

无需M文件,直接定义

用syms定义一个符号表达式,用subs调用:

Syms f x

%定义符号

f=1/(1+x^2);

%定义符号表达式

subs(f,

‘x’,代替x的数值或符号)

注:对于在syms中已经定义过的符号变量,在subs中进行替代时,单引号可以省略。但是,如果在syms后又被重新定义为其他类型,则必须加单引号,否则不可替换。

这种函数定义方法的特点是,可以用符号进行替换

Syms f x

f=1/(1+x^2);

subs(f,

‘x’,’y^2’)

ans=

1/(1+(y^2)^2)

注:该方法的缺点是,由于使用符号运算内核,运算速度会大大降低。

6、字符串+subs:无需M文件,直接定义

直接定义一个字符串,用subs命令调用。例如:

f=’1/(1+x^2)’

%定义字符串

z=subs(f,’x’,2)

g=subs(f,’x’,’y^2’)

注:优点是,占用内存最少,定义格式方面自由。

缺点是,无法对字符进行符号转化。

当所要替代的符号在调用前都已经有了数值定义,则可以直接调用:subs(f).例如:

f=’x^2*y’;

x=2;y=3;

subs(f)

ans=12

-------------------------------------------

详细:Matlab中同一文件定义子函数的方法

有时子函数可能很短,就几行,可能希望将多个函数定义放在同一个.m文件中,这里就存在一个子函数的定义问题。

在matlab中一个.m文件中可以有多个的子函数,但仅能有一个主函数,并且M文件名必须和主函数相同

在一个m文件中通常有两种定义子函数的方法:

1.嵌套定义

function mainFunc()

...

a = myfunc1();

...

function myfunc1()

...

end

end

2.非嵌套定义

function mainFunc()

...

a = myfunc1();

...

end

function myfunc1()

...

end

在第二种情况中,myfunc1和主函数就是两个独立的函数,和把它们写在两个独立的文件

中没有差别。变量名想怎么起怎么起,不会有任何冲突。

而第一种情况中,myfunc1会和主函数共享变量名。这种情况下,使用相同的变量名,如

果不是故意为之,就不合适了。

对于嵌套函数,函数定义中的end必不可少。

例子:

下面是某个.m脚本文件(son_function.m文件)中的内容:

%

%-----------------------------------------------------------------------

function son_function(

) %主函数必须位于最上方

%子函数举例

max1=find_max(1,2,3)

max2=find_max(7,3,9)

function

max=find_max(a,b,c) %子函数

if

(a>=b)&(a>=c)

max=a;

elseif

(b>=a)&(b>=c)

max=b;

else

max=c;

end

%

%-----------------------------------------------------------------------

注意:

M文件中将函数的调用直接写到m脚本文件中的情况是不允许的,必须也把调用写成函数的形式,或者将子函数都写成单独的m文件。

如将上程序中的第一行屏蔽掉,即

% function son_function(

)

会出现下面的错误

Function

definitions are not permitted at the prompt or in

scripts.

---------------------------------

下面一段文字是摘自matlab帮助中的一段文字:end在function中的使用

end

also marks the termination of an M-file

function, although in most cases, it is optional. end statements

are required only in M-files that employ one or more nested

functions. Within such an M-file, every function (including

primary, nested, private, and subfunctions) must be terminated with

an end statement. You can terminate any function type with end, but

doing so is not required unless the M-file contains a nested

function

尽管大多数情况下,end在function的用法是可选的,但也可以用它标记一个M文件函数的结束。end语句仅在使用一个或多个嵌套函数的情况下才是要求的。在诸如此类嵌套函数的M-文件中,每一个函数(包括主调函数,嵌套函数,私有函数和子函数)必须以一个end语句来结束。可以使用end结束任一函数类型,但这样做除了M-文件包含一个嵌套函数其他情况并非必要的。

matlab 定义string_[整理]Matlab中函数定义方法相关推荐

  1. php中函数的定义格式,在php中函数定义的格式

    在php中函数定义的格式 函数就是功能.封装一段用于完成特定功能的代码.调用一个函数就是在调用一个功能. 自定义函数function generate_table($row, $col){$html ...

  2. python中函数和方法的区别

    本篇内容主要介绍从几个维度来介绍下python中函数和方法的区别: 首先,从分类的角度来分析. (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函 ...

  3. python中函数和类的区别_Python中函数和方法的区别

    简单总结: 与类和实例无绑定关系的function都属于函数(function): 与类和实例有绑定关系的function都属于方法(method). 首先摒弃错误认知:并不是类中的调用都叫方法 函数 ...

  4. js中 函数和方法的区别:转载于黑泽君

    js中 函数和方法的区别 在javascript中的解释为: 函数(function)是可以执行的javascript代码块,由javascript程序定义或javascript实现预定义.函数可以带 ...

  5. python中的方法和函数的区别_Python中函数和方法的区别

    在Python中函数和方法是有区别的. 区别一所处的位置:函数是直接写文件中而不是class中,方法是只能写在class中. 区别二定义的方式: 1.函数定义的方式 def关键字  然后接函数名 再是 ...

  6. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  7. Go - 反射中 函数 和 方法 的调用 - v.Call()

    上一篇文章 说到了 Golang 中的反射的一些基本规则,重点就是文章中最后的三点,但是这篇文章并没有说如何在反射中调用函数和方法,这就是接下来要说的. 反射中调用 函数 众所周知,Golang 中的 ...

  8. python函数与方法的区别_python中函数和方法有哪些区别

    python中函数和方法有哪些区别 发布时间:2020-11-16 09:30:04 来源:亿速云 阅读:89 作者:小新 小编给大家分享一下python中函数和方法有哪些区别,相信大部分人都还不怎么 ...

  9. java中函数和方法区别_java中函数和方法的区别是什么?

    java中函数和方法的区别是什么? 面向对象的语言叫方法 面向过程的语言叫函数 在java中没有函数这么一说,只有方法一说.实际上方法就是函数,函数就是方法,只是在不同的语言不同的称呼而已. [推荐教 ...

最新文章

  1. R语言sunburst图(sunburst plot)可视化实战:使用sunburstR包和ggplot2包进行可视化
  2. 轻松自动化---selenium-webdriver(python) (六)
  3. freertos源码详解与应用开发 pdf_互联网企业面试必问Spring源码?搞定Spring源码,看完这篇就够了...
  4. SGU traffic light
  5. 天然气压缩因子计算软件_徐秀芬等:天然气加气站压缩机组效率的计算方法
  6. 魅族管理层换血?官方回应:信息被错误解读 黄章仍为最大股东
  7. 【愣锤笔记】基于vue的进阶散点干货
  8. Ubuntu安装Qt以及配置步骤
  9. APP色彩搭配方案是由主色、辅助色和点缀色构成
  10. vba字典学习案例二
  11. L2-016 愿天下有情人都是失散多年的兄妹
  12. CS229 --Lecture1 Introduction
  13. Kanzi入门学习(二)
  14. 请问肾阴虚吃什么药?饮食注意什么?还有桂附地黄丸是治肾阴虚还是治肾阳虚的?谢谢...
  15. 5-3 凸多边形面积
  16. 弘辽科技:如何修改老链接不被降权。
  17. 小米5怎么安android,小米5怎么插卡 小米5手机安装sim卡图文教程
  18. 芬兰ZYFRA公司在首届中俄创新大赛中获胜
  19. 机器学习之Boltzmann 机算法
  20. 计算机有公式编辑器吗,MathType

热门文章

  1. 微信公共账号开发:48001 api unauthorized解决
  2. suse linux bash漏洞,bash漏洞: CVE-2014-6271漏洞及紧急修复方法
  3. Unity 物体绕轴旋转
  4. 又是标量子查询引起的性能问题
  5. 需求获取的三阶段:需求背景、需求调研、需求分析(1)
  6. IDEA和PyCharm启动时进入欢迎界面
  7. 初创公司需要哪些部门_初创公司何时需要敏捷?
  8. 无需GPS,一种更低成本的室内导航解决方案,你值得拥有
  9. 博客主Judge已跳槽搬家emmm
  10. 嵌入式 Linux 启动流程和 bootloader 介绍