【发布时间】:2019-04-13 10:58:26
【问题描述】:
我正在寻找一种在 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)
输出是一个 100 元素的向量。
代码生成一个函数句柄,该句柄接受一个 n 长向量并返回一个 n 长向量。 重要的是我可以控制输出的每个元素应该依赖于输入的哪些元素。
这种构造函数的方式看起来真的很丑很复杂,我想知道在matlab中是否有更好的方法来编写这样的函数?
【问题讨论】:
-
[1,1,1,1,1,1,...,1],如果执行该示例会给出什么
-
我认为这是一个最小的工作示例。该示例也适用于“更长”的函数,但是数学公式涉及的越多,计算替换的可读性越低,并且更容易出错编码它成为。 .