MATLAB函数专题——基础篇

0. 函数句柄(函数的“指针”)

定义:一种可储存函数关系式的matlab数据类型

作用:(1)将一个函数传递给另一个函数,许多matlab函数接受将函数句柄用作输入,例如将函数关系式传递给fsolve函数进行求解

(2)构造匿名函数(内联方式定义而非存储在程序文件中的函数)

使用isa(h,'function_handle')来查看变量h是否是函数句柄。

创建函数句柄方法:

f = @myfunction; 

为名为myfunction的函数创建函数句柄f。

与函数句柄相关的函数

(1)feval计算函数

[y1,...,yN] = feval(fun,x1,...,xM)
fun:函数名称或函数句柄
x1,...,xM:输入参数

a = feval(@sin,pi/2)   %函数句柄使用方法
% a = 1
b = feval('sin', pi/2)  % 函数名使用方法
% b = 1

(2)matlabFuntion函数

功能:将符号表达式转化为函数句柄(匿名函数)和子函数(得到的是向量化的函数形式)

(1)g = matlabFunction(f)
f:符号表达式或符号函数
g:转换得到的函数句柄
(2)g = matlabFunction(f1,...,fN)
(3) g = matlabFunction(_,Name, Value)
输入参数'Vars'可定义输出函数句柄中变量的形式
输入参数'File'+'myfile'输出以'myfile'为名的子函数文件

syms x y
syms f(x,y)
f = x^2 + y^2;  % 符号表达式
f(x,y) = x^2 + y^2;   % 符号函数
g1 = matlabFunction(f)
g2 = matlabFunction(f(x,y))
syms x y z t
r = (x + y/2 + z/3)*exp(-t);
% 以t+向量[x y z]为输入参数的形式输出函数句柄
g3 = matlabFunction(r,'Vars', {t, [x y z]}) 
g4 = matlabFunction(r,'File','Myfunc','Vars',{t,[x y z]})

生成的Myfunc代码为:

function r = Myfunc(t,in2)
%MYFUNC
%    R = MYFUNC(T,IN2)

%    This function was generated by the Symbolic Math Toolbox version 8.7.
%    04-Jan-2022 15:26:25

x = in2(:,1);
y = in2(:,2);
z = in2(:,3);
r = exp(-t).*(x+y./2.0+z./3.0);

(3)str2func函数

功能:将字符串转化为函数句柄

fh = str2func(str)
str:函数名或匿名函数的字符表达式
fh:函数句柄或匿名函数句柄

fh1 = str2func('cos')
fh1(0)
c = '@(x)x.^2';
fh2 = str2func(c)
fh2(1:3)

(4)func2str函数

功能:将函数句柄转化为字符向量

c = func2str(f)
f:函数句柄或匿名函数句柄
c:字符向量和匿名函数字符向量

f = @(x,y)x^2+y^2;
c = func2str(f);
disp(['函数',c,'在原点的值为:', num2str(f(0,0))]);

函数@(x,y)x^2+y^2在原点的值为:0

1. 匿名函数

1.1 定义

基于单行表达式的MATLAB函数,不需要程序文件

语法:

h = @(arglist)anonymous_function; 

创建了以anonymous_function为主体arglist为参数列表的匿名函数。

1.2 匿名函数的种类

按照自变量的个数及层数分为:单变量匿名函数、多变量匿名函数、单重匿名函数和多重匿名函数。

1.2.1 单重匿名函数

f = @(x)x.^2 +2;
f(1:3)
% ans = 3 6 11

含参数(参数已知)的单变量匿名函数

a = 10; b = 30;
f = @(x)a*x+b; 
f(2)
% ans = 50

当参数a,b将值传递给匿名函数后,在匿名函数中的值不会因为a,b值的变化再改变,当a,b重新赋值时,需要重新构造匿名函数进行计算

a = 30; b = 10;
f(2)
% ans = 50
f1 = @(x)a*x+b;
f1(2)
% ans = 70

1.2.2 多变量匿名函数

g = @(x,y)x.^2+y.^2;
g(3,4)
% ans = 25

1.2.3 单重匿名函数

上述两种匿名函数均属于单重匿名函数,只有一个“@”符号引导具体的函数表达式。多重匿名函数在参数传递方面非常方便。在应用篇中将会详细讲解。

1.2.4 多重匿名函数

f = @(a,b)@(x)a*x+b
% f = 
%    @(a,b)@(x)a*x+b

其中,“a,b”是外层变量,“x”是内层变量。每个@符号后面括号里的变量的作用域一直到表达式的结尾。

2. 嵌套函数

2.1 定义

nested function,即嵌套在函数体内部的函数。嵌套函数可以出现在函数体内部的任何位置,开始以function声明,以end结束。

parent;

function parent
disp('This is the parent function')
nestedfx

function nestedfx
    disp('This is the neseted function')
end

end

程序输出:

This is the parent function
This is the neseted function

2.2 嵌套函数的变量作用域

主函数和嵌套在其内的函数,它们各自的变量是可以相互访问的:(1)嵌套函数可以自由访问主函数的变量,但主函数访问嵌套函数内的变量必须经过调用之后才能用。(2)主函数内彼此没有嵌套关系的嵌套函数间无法自由共享变量,只能通过主函数进行共享。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值