给定函数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
答案 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