MATLAB inline()内联函数的用法(非常详细,附带实例)
在 MATLAB 中,内联函数(Inline Function)的属性和编写方式与普通函数的相同,但相对来说,内联函数的创建要简单得多,其调用格式如下。
使用 inline() 函数时,有以下几点需要注意:
1) 字符串表达式“CE”中不能包含赋值符号“=”。
2) 内联函数是沟通 eval 和 feval 两个函数的桥梁,只要是 eval 函数可以操作的表达式,都可以通过 inline 指令转化为内联函数。这样,内联函数总可以被 feval 函数调用。MATLAB 中的许多内置函数就是通过被转换为内联函数,从而具备了根据被处理的方式不同而变换不同函数形式的能力的。
MATLAB 中的内联函数属性性指令集如下表所示,读者可以根据需要使用。
【实例 1】内联函数的第一种创建格式是使内联函数适用于数组运算。在命令行窗口中输入以下语句,并显示相应的输出结果:
【实例 2】内联函数的第一种创建格式的缺陷在于,不可以使用多标量构成的向量进行赋值,而使用第二种创建格式可以。在命令行窗口中输入以下语句,并显示相应的输出结果:
在命令行窗口中输入以下语句,并显示相应的输出结果:
【实例 3】产生向量输入、向量输出的内联函数。在命令行窗口中输入以下语句,并显示相应的输出结果:
在命令行窗口中输入以下语句,并显示相应的输出结果:
在命令行窗口中输入以下语句,并显示相应的输出结果:
在命令行窗口中输入以下语句,并显示相应的输出结果:
【实例 4】以最简练的格式创建内联函数;内联函数可被 feval 函数调用。在命令行窗口中输入以下语句,并显示相应的输出结果:
在命令行窗口中输入以下语句,并显示相应的输出结果:
调用格式 | 说 明 |
---|---|
inline('CE') |
把字符串表达式“CE”转化为输入变量自动生成的内联函数。 本语句将自动对字符串 CE 进行辨识,其中,除了预定义变量名(如圆周率 pi)、常用函数名(如 sin、rand 等),其他由字母和数字组成的连续字符均被辨识为变量。 另外,连续字符后紧接左括号的,不会被辨识为变量,如 array(1)。 |
inline('CE', arg1, arg2, …) |
把字符串表达式“CE”转换为 arg1、arg2 等指定的输入变量的内联函数。 本语句创建的内联函数最为可靠,对于输入变量的字符串,用户可以随意改变,但是由于输入变量已经规定,因此生成的内联函数不会出现辨识失误等错误。 |
inline('CE', n) |
把字符串表达式“CE”转化为 n 个指定的输入变量的内联函数。 本语句对输入变量的字符是有限制的,其字符只能是 x,P1,…,Pn 等,其中 P 一定为大写字母。 |
使用 inline() 函数时,有以下几点需要注意:
1) 字符串表达式“CE”中不能包含赋值符号“=”。
2) 内联函数是沟通 eval 和 feval 两个函数的桥梁,只要是 eval 函数可以操作的表达式,都可以通过 inline 指令转化为内联函数。这样,内联函数总可以被 feval 函数调用。MATLAB 中的许多内置函数就是通过被转换为内联函数,从而具备了根据被处理的方式不同而变换不同函数形式的能力的。
MATLAB 中的内联函数属性性指令集如下表所示,读者可以根据需要使用。
指令句法 | 功能 | 指令句法 | 功能 |
---|---|---|---|
class(inline_fun) | 提供内联函数的类型 | argnames(inline_fun) | 提供内联函数的输入变量 |
char(inline_fun) | 提供内联函数的计算公式 | vectorize(inline_fun) | 使内联函数适用于数组运算 |
【实例 1】内联函数的第一种创建格式是使内联函数适用于数组运算。在命令行窗口中输入以下语句,并显示相应的输出结果:
Fun1 = inline('mod(12,5)') Fun1 = 内联函数: Fun1(x) = mod(12,5)在命令行窗口中输入以下语句,并显示相应的输出结果:
Fun2 = vectorize(Fun1) Fun2 = 内联函数: Fun2(x) = mod(12,5)在命令行窗口中输入以下语句,并显示相应的输出结果:
Fun3 = char(Fun2) Fun3 = 'mod(12,5)'
【实例 2】内联函数的第一种创建格式的缺陷在于,不可以使用多标量构成的向量进行赋值,而使用第二种创建格式可以。在命令行窗口中输入以下语句,并显示相应的输出结果:
Fun4 = inline('m*exp(n(1))*cos(n(2))', Fun4(1,[-1,pi/2]) Fun4 = 内联函数: Fun4(m) = m*exp(n(1))*cos(n(2)) 错误使用 inline/subsref (line 14) 内联函数的输入数目太多。
在命令行窗口中输入以下语句,并显示相应的输出结果:
Fun5 = inline('m*exp(n(1))*cos(n(2))', 'm', 'n', Fun5(1,[-1,pi/2]) Fun5 = 内联函数: Fun5(m,n) = m*exp(n(1))*cos(n(2)) ans = 2.2526e-017
【实例 3】产生向量输入、向量输出的内联函数。在命令行窗口中输入以下语句,并显示相应的输出结果:
y = inline('[3*x(1)*x(2)^3;sin(x(2))]') y = 内联函数: y(x) = [3*x(1)*x(2)^3;sin(x(2))]
在命令行窗口中输入以下语句,并显示相应的输出结果:
Y = inline('[3*x(1)*x(2)^3;sin(x(2))]') Y = 内联函数: Y(x) = [3*x(1)*x(2)^3;sin(x(2))]
在命令行窗口中输入以下语句,并显示相应的输出结果:
>> argnames(Y) ans = 1x1 cell 数组 {'x'}
在命令行窗口中输入以下语句,并显示相应的输出结果:
x=[10,pi*5/6];y=Y(x) y = 538.3034 0.5000
【实例 4】以最简练的格式创建内联函数;内联函数可被 feval 函数调用。在命令行窗口中输入以下语句,并显示相应的输出结果:
z=inline('floor(x)*sin(P1)*exp(P2^2)',2) z = 内联函数: Z(x,P1,P2) = floor(x)*sin(P1)*exp(P2^2)
在命令行窗口中输入以下语句,并显示相应的输出结果:
z = Z(2.3,pi/8,1.2), fz = feval(z,2.3,pi/8,1.2) z = 3.2304 fz = 3.2304