我正在寻找一种简单的方法来在matlab中编写将向量(数组)作为输入并给出向量(数组)作为输出的函数。
如果输入和输出数组很小,则可以使用函数句柄进行编码:
f=@(u)[u(1),u(2)]
这种方法不适用于大向量,因为它无法让我在循环中指定输出数组的每个分量。
我找到了一种使其工作的方法,但这非常丑陋:将整个函数作为字符串链接在一起,然后将其转换为函数:
str2fun(strcat('@(u)[u(',int2str(1),'), u(',int2str(2),')]'))
示例:
n=100; input=zeros(1,n);
str=strcat('@(u)[cos(u(',int2str(1),')),');
for i=2:n-1
str=strcat(str,'cos(u(',int2str(i),'))^',int2str(i),',');
end
str=strcat(str,'cos(u(',int2str(n),'))^',int2str(n),']');
f=str2func(str);
f(input)
输出是1的100元素向量。
该代码生成一个函数句柄,该函数句柄使用一个n个长向量,并返回一个n个长向量。 重要的是,我可以控制输入的哪些元素应该依赖输出的每个元素。
这种构造函数的方式看起来确实很丑陋和复杂,我想知道是否有更好的方法在matlab中编写此类函数?
答案 0 :(得分:2)
您的代码可以如下矢量化:
f = @(u) cos(u).^(1:numel(u));