【问题标题】:Apply calculation to each element simultaneously in an array in matlab using a function (Version 2013b)使用函数将计算同时应用于matlab中数组中的每个元素(2013b版)
【发布时间】:2018-09-26 13:04:30
【问题描述】:

我有一个大小为 106 x 103 的矩阵(类型:double)。该矩阵代表一个时间步长(一天)的欧洲网格温度数据。

对于每一天,我想使用我在 Matlab 中编码的公式,根据矩阵中每个“单元”(i,j 元素)记录的温度计算一个物种的度日(热时间)基于正弦波方法。

因此,最终,我想要做的是能够对我的矩阵进行计算,这将为每个网格单元(i,j 元素)提供单独的输出,具体取决于那里记录的温度数据。 我可以用一个循环来做到这一点,但是我必须将这些学位日累积多年,所以我宁愿找到一种方法将计算同时应用于每日矩阵中的每个元素(然后循环遍历这些天数(矩阵) )。 根据我的阅读,如果您的矩阵是单元阵列(我的不是),您可以使用 cellfun。 然后我也在查看 bsxfun 选项,但似乎这些函数只是标准函数..比如平均值、最大值等。 所以现在,我正在考虑将 arrayfun 与我从算法创建的函数结合使用来计算学位天数。 我一直在尝试编写一个测试函数,但 Matlab 不断抛出同样的错误: 我输入:

function output=degreedays(x)

Matlab 会返回:

Error: Function definitions are not permitted in this context.

谁能告诉我我做错了什么?为什么不接受函数名的声明?

【问题讨论】:

  • function... 是函数定义。它不可能在任何地方发生,通常只发生在包含所述功能的文件的顶部。一旦你有了这个功能,你就可以像outStuff = degreedays(yourData);一样使用它

标签: matlab function matrix


【解决方案1】:

MATLAB 不允许您在命令行中定义这样的命名函数。您需要将函数定义放在一个文件中。然后 MATLAB 可以通过文件名调用该函数 - 所以在你的情况下,将你的函数定义放在一个名为 degreedays.m 的文件中。

有关更多信息,请参阅文档:https://uk.mathworks.com/help/matlab/matlab_prog/create-functions-in-files.html

【讨论】:

  • 谢谢。当我将其保存为脚本时,它起作用了。然后我尝试使用 arrayfun 调用它:'arrayans=arrayfun(@dd(tmax,tmin))' 其中 dd 是我的函数,tmax 和 tmin 是两个输入。但似乎 matlab 只喜欢数组函数的一个输入。你能建议一种方法让它接受函数的两个输入吗?
  • arrayfun 可以调用具有多个输入的函数,例如hypot 需要两个输入,您可以这样调用它:arrayfun(@hypot, 1:10, 1:10)。 (当然,hypot 是矢量化的,所以在这种情况下您不需要使用arrayfun)。
猜你喜欢
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 2013-10-13
  • 2012-01-24
相关资源
最近更新 更多