我需要能够在数组中存储多个函数,但是这些函数是在 forloop 中创建的,这使得这变得很困难。
我查看了帮助中心,您可以创建一个设定大小的函数数组,如下所示:
f = {@(x)x.^2;
@(y)y+10;
@(x,y)x.^2+y+10};
但是我想使用 for 循环一次添加它们并适用于 n 的任何值 所以我尝试使用细胞:
n = 6
C = cell(n, 1)
for k = 1:n
C(k) = @(x) x + n
end
但它返回错误:
"Conversion to cell from function_handle is not possible."
还有其他方法可以做到这一点吗?
1.-
避免此问题中提到的错误的方法如评论中所述:
用大括号索引包含函数的单元格
{ }
n=3
C={}
for k=1:1:n
C{k}=@(x) x+n;
end
在 MATLAB 中
f={@(x) x.^2;@(y) y+10;@(x,y) x.^2+y+10}
f(1)
如此处定义的
f
f(1)
不运行函数 f
但仅返回内容
=
1×1 cell array
{@(x)x.^2}
要运行
f
函数,请组合 { }
来调用 f
内的特定函数和 ( )
来输入值
f{3}(1,2)
f{1}(2)
=
13
=
4
2.-
另一种方法是在单独的文件中或脚本末尾定义函数
fun1=@name_fun;
x=[1 2]
n=10
fun1(x,n)
function F=name_fun(x,n)
F(1)=x(1).^2;
F(2)=x(2)+n;
F(3)= x(1).^2+x(2)+n;
end
3.使用句柄来运行
此选项可能是首选。
定义函数的句柄时,无需使用单元格:
f1=@(x) x.^2;
s=functions(f1)
到目前为止
f1
仅包含x.^2
s
是函数的句柄 f1
s
s =
struct with fields:
function: '@(x)x.^2'
type: 'anonymous'
file: ''
workspace: {[1×1 struct]}
within_file_path: ''
向函数结构添加函数
f1
s(2).function=@(x) x+10;
s(3).function=@(x,y) x.^2+y+10;
现在(向量)函数
s
的结构f1
包含3个函数
s
s =
1×3 struct array with fields:
function
type
file
workspace
within_file_path
funciton
同样,直接向结构体添加函数:
g.a=@(x) x.^2
g =
struct with fields:
a: @(x)x.^2
添加第二个功能
g.b=@(x) x+10
g =
struct with fields:
a: @(x)x.^2
b: @(x)x+10
添加第三个功能
g.c=@(x,y) x.^2+y+10
g =
struct with fields:
a: @(x)x.^2
b: @(x)x+10
c: @(x,y)x.^2+y+10
使用这些功能
g.a(3)
=
9
g.c(2.1,3.4)
=
17.81