【问题标题】:matlab coding n-dimensional functionmatlab编码n维函数
【发布时间】: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],如果执行该示例会给出什么
  • 我认为这是一个最小的工作示例。该示例也适用于“更长”的函数,但是数学公式涉及的越多,计算替换的可读性越低,并且更容易出错编码它成为。 .
  • 你需要阅读this page of the documentation

标签: matlab function


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多