通过改变输入维度来评估多变量函数

时间:2015-04-27 13:34:18

标签: matlab math

给定函数f:R ^ m - > R ^ n,其中m,n一直在变化。将其实现为Matlab函数的最佳方法是什么,该函数在任意点x∈R^ m处评估输出。

函数是向量值的事实,即其目标空间是多维的,很容易使用匿名函数数组。然后我们可以使用一个简单的循环:

function testFunc(f,x)
resultArray = zeros(numel(f),1);
for kk = 1: length(f)
    resultArray(kk) = f{kk}(x);
end
resultArray
end

在m = 1,n = 3的情况下具有以下功能

f = {@(x) (x*x); @(y) (exp(y)); @(z) (cos(z))}

产生预期的输出

testFunc(f,2)

resultArray =

4.000000000000000
7.389056098930650
-0.416146836547142

如果要修复m,那么这很容易扩展到多变量情况。但我事先并不知道m的价值。

如何解决这个问题?提前谢谢。

实施例。假设我成功实现了我的函数testFunc。然后命令提示符应该是这样的:

 >> f = @(x,y) (x*y);
 >> g = @(x,y,z) (exp(x*y*z));
 >> h = {@(x,y) (log(x*y)); @(x,y) (sin(x*y))}
 >> p = [1;2];
 >> q = [1;2;3];
 >> testFunc(f,p)
 ans = 
       2
 >>testFunc(g,q)
 ans =

       4.034287934927351e+02
 >> testFunc(h,p)
 ans =
       0.693147180559945 
       0.909297426825682

1 个答案:

答案 0 :(得分:0)

修改自己的起点,这是您正在寻找的解决方案。至少,如果我正确理解你的问题。它为您的测试用例提供了所需的输出。使用的原则是comma separated lists.

function testFunc(f,x)

    x=num2cell(x);

    resultArray = zeros(numel(f),1);

    if ~iscell(f)
        f={f};
    end

    for kk = 1: length(f)
       resultArray(kk) = f{kk}(x{:});
    end

    resultArray

end