MATLAB:合并函数句柄

Ber*_* U. 5 matlab

我目前正在使用MATLAB编写模拟代码,并且需要一些关于我一直遇到的问题的帮助.

我正在一个问题,即我有n单独的匿名功能手柄f_i,其中的每一个被存储在单元阵列functions,并接受一个1x1数字数组x_i,并返回一个1x1数字数组y_i.

我想结合这些匿名函数处理成接受一个单一的匿名函数手柄nX 1数值数组X,并返回单个nX 1-numeric阵列Y.在这里X(i) = x_i,Y(i) = y_i = f_i(x_i)

作为例子,让n = 2和F_1和F_2是两个函数处理输入和输出1x1阵列和被存储在一个单元阵列命名的功能

f_1 = @(x_1) x_1^2 
f_2 = @(x_2) x_2^3
functions = {f_1,f_2}
Run Code Online (Sandbox Code Playgroud)

我基本上需要能够使用的代码n,f_1f_2构造一个输入和输出2x1数字数组的函数句柄F.

F = @(x) [f_1(x(1,1));f_2(x(2,1))]
Run Code Online (Sandbox Code Playgroud)

ib.*_*ib. 5

使用内联 - @()匿名语法来定义这样的函数是很困难的(因为函数体的要求受限于表达式).仍然可以定义一个普通(非匿名)函数,该函数在给定向量的项目上运行,并将给定单元格数组中的函数应用于这些项目.

function y = apply_funcs(f, x)
    assert(length(f) == length(x));
    y = x;
    for i = 1 : length(f)
        y(i) = feval(f{i}, x(i));
    end 
end
Run Code Online (Sandbox Code Playgroud)

每次需要将此函数传递给其他函数时,只需引用它的@-handle.

F = @apply_funcs
Run Code Online (Sandbox Code Playgroud)