【发布时间】:2015-07-05 23:57:08
【问题描述】:
给定一个函数 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
【问题讨论】:
-
如果将 resultArray(kk) 替换为 resultArray{kk} 以生成元胞数组会怎样。那么 x 可以是一个向量
-
@freude 我看不出数组有什么帮助。以'函数' f = @(x,y) (xy) 和 g= @(x,y,z) (exp(xy*z)) 和点 p 为例=(1,2) 和 q=(1,2,3)。那么 testFunc(f,p) 应该输出 2 并且 testFunc(g,q) 应该输出 exp(6)。但我不能在两者之间更改 testFunc。
-
我无法理解
m(输入向量的大小)不是 1 时的输出应该是什么样的。你能举一个m = 2的例子吗? -
@MartinJ.H.我想你的意思是m = 2?在这种情况下,请看我上面的评论。
-
@MartinJ.H.最后,我还使用示例输出编辑了我的帖子。