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打头的函数文件,不能是前面不是函数,后面跟一串函数。强调一下,前面是命令后面加函数是不行的,必须前面也是函数!前面无参数输入的而是一段命令,直接将这些命令定义为一个无参数的函数就可以了。

3Inline:无需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))

5Syms+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-文件包含一个嵌套函数其他情况并非必要的。

时间: 2024-12-13 14:50:18

Matlab中函数定义方法的相关文章

JavaScript 函数定义方法

JavaScript 函数定义方法. 函数声明 在之前的教程中,你已经了解了函数声明的语法 : function functionName(parameters) { 执行的代码 } 函数声明后不会立即执行,会在我们需要的时候调用到. function myFunction(a, b) { return a * b; } 分号是用来分隔可执行JavaScript语句. 由于函数声明不是一个可执行语句,所以不以分号结束. 函数表达式 JavaScript 函数可以通过一个表达式定义. 函数表达式可

matlab中函数的句柄是什么意思?有什么作用?

比定义f(x)=x^2写[email protected](x)(x.^2)其@(x)(x.^2)匿名函数第括号面自变量第二括号面表达式@函数指针[email protected](x)(x.^2)表示匿名函数@(x)(x.^2)赋值给f于f表示该函数于f(2)=2.^2=4:f(1:3)=[1:3].^2=[1 4 9]等等 定义匿名函数调用别匿名函数比[email protected](x,y)(x.^2+y.^2)定义函数x^2+y^2[email protected](t)(f1(t,2

Go - 反射中 函数 和 方法 的调用

上一篇文章 说到了 Golang 中的反射的一些基本规则,重点就是文章中最后的三点,但是这篇文章并没有说如何在反射中调用函数和方法,这就是接下来要说的. 反射中调用 函数 众所周知,Golang 中的函数是可以像普通的 int.float 等类型变量那样作为值的,例如: package main import "fmt" func hello() { fmt.Println("Hello world!") } func main() { hl := hello hl

Javscript调用iframe框架页面中函数的方法

Javscript调用iframe框架页面中函数的方法,可以实现iframe之间传值或修改值了, 访问iframe里面的函数: window.frames['CallCenter_iframe'].hw_CallIn(callerid,sessionid); 说明: CallCenter_iframe为iframe的id hw_CallIn为iframe中页面中的方法名 callerid和sessionid为方法中的参数 例子如下:index.html <a href="#" o

shell中函数定义及使用

#!/bin/sh #函数要定义在使用之前 function lession(){    echo "this is a function" } lession function lession2(){    echo "this is lession2"    echo "The first is $1"    echo "The first is $2" } lession2 1 2 function lession3()

Matlab中函数句柄@的作用及介绍

问:[email protected](x)acos(x)表示什么意思?其中@代表什么?答:表示f为函数句柄,@是定义句柄的运算符.[email protected](x)acos(x) 相当于建立了一个函数文件:% f.mfunction  y=f(x)y=acos(x); 若有下列语句:[email protected](x)1/2.*(x==-1/2)+1.*(x>-1/28&x<1/2)+1.2.*(x==-1/2); 则相当于建立了一个函数文件: % xsqual.m fun

php中函数和方法的区别

php的方法就是定义在类里面的方法,一般不建议在方法内部定义方法,但是这种也可以这种叫做内部方法,一般只能本方法调用. 如果定义在同一个类中的方法,在同类的其他方法中调用是$this->方法名就可以这样调用了 php函数是可以在框架中增加的D:\web\yezhufang\code\Application\Admin\Common\function.php 是可以在这个页面中增加的.

matlab中plot使用方法

MATLAB有非常强的图形功能,能够方便地实现数据的视觉化.强大的计算功能与图形功能相结合为MATLAB在科学技术和教学方面的应用提供了更加广阔的天地.以下着重介绍二维图形的画法,对三维图形仅仅作简单叙述. 5.1 二维图形的绘制 5.1.1 基本形式 二维图形的绘制是MATLAB语言图形处理的基础,MATLAB最经常使用的画二维图形的命令是plot,看两个简单的样例: >> y=[0 0.58 0.70 0.95 0.83 0.25]; >> plot(y) 生成的图形见图5-1

JS中函数定义和函数表达式的区别

摘要: (function() {})();和(function(){}());的区别 Javascript中有2个语法都与function关键字有关,分别是: 函数定义:function FunctionName(FormalParameterList) { FunctionBody } 函数表达式:function [FunctionName](FormalParameterList) { FunctionBody } 从语法的定义上看,这两者几乎是一模一样的(唯一的区别是函数表达式可以省略