Matlab编码n维函数

时间:2019-04-13 10:58:27

标签: matlab function

我正在寻找一种简单的方法来在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中编写此类函数?

1 个答案:

答案 0 :(得分:2)

您的代码可以如下矢量化:

f = @(u) cos(u).^(1:numel(u));