【问题标题】:How to apply a function to an array in MatLab with multiple arguments?如何将函数应用于具有多个参数的 MatLab 中的数组?
【发布时间】:2016-10-27 05:50:02
【问题描述】:

我有一个名为contin 的数组,如[10,100,1000],我想将一个名为transcontin 的函数应用于该数组。我知道这样做的方法是arrayfunc(@transcontin, contin),如果该函数只有一个输入。

但是,函数 transcontin 需要三个输入:TempbH。而且,我需要它将数组的值作为b 传递给函数transcontin

但是,我必须遍历 TempH 的值。 TempH 的这些值在每个应用程序中与 contin 保持相同。

我该如何做到这一点?我该如何做arrayfunc(@transcontin, contin) 但传入其他两个不作为数组传入的参数?

示例输入:contin=[10, 100, 1000]

功能:

function result=transcontin(Temp,b,h)
   result=b+Temp^h;
end

假设我想修复 Temp 和 h,并将数组的元素作为 b 传递:

Temp=5;
h=(1/3);

在我根据@Edric arrayfun(@b transcontin(Temp, b, h), contin) 的建议做了这样的事情之后,输出应该是一个向量转换为:

[10+5^(1/3), 100+5^(1/3), 1000+5^(1/3)]

如何做到这一点?

【问题讨论】:

  • 提供输入/输出/中间矩阵的例子
  • 如果我理解你的问题,你有一些固定的参数,但arrayfunneed 数组作为输入。您可以使用repmat 来克隆您的参数。比如:arrayfun(@thefunction,contin,repmat(b,1000,1) 如果你有 1000 个循环。

标签: arrays matlab matrix functional-programming


【解决方案1】:

您可以将常量参数“绑定”到匿名函数句柄,如下所示(我认为):

out = arrayfun(@(x) transcontin(Temp, x, H), contin)

arrayfun 的第一个参数是匿名函数句柄——该语法创建了一个函数,该函数根据arrayfun 的要求采用单个参数,并在常量值TempH 中“绑定”。更多文档在这里:https://uk.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html

【讨论】:

  • Matlab 不喜欢@(x) transcontin(Temp, x, H), 的语法...不喜欢它们之间的空格
  • @Hunle。这听起来似是而非。你得到了什么确切的错误?
猜你喜欢
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 2015-04-25
相关资源
最近更新 更多