如何在 MatLab 中向匿名函数数组添加新元素?

问题描述 投票:0回答:1

我需要能够在数组中存储多个函数,但是这些函数是在 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."

还有其他方法可以做到这一点吗?

matlab
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.