【问题标题】:Apply on MATLAB a constant function on a array returning then an array在 MATLAB 上对数组应用一个常量函数,然后返回一个数组
【发布时间】:2018-11-02 19:42:54
【问题描述】:

我将一个函数(它是一个常量)应用于一个数组,我认为它会返回一个数组,其中的值都等于 1,但它只返回 1。

q=@(x) 1
q([1:n].*10)

ans = 1

我以为它会返回:ans = [ 1,1,1,1,1,...]

【问题讨论】:

  • 如果你想让它返回一个数组,让它返回一个数组。 1 不是数组。它不是“在数组上应用函数”,它只是一个恰好被赋予一个数组作为输入的函数。您可能会将其与 arrayfun 混淆(此处不需要)。
  • 你想完成什么?你想让x的每个元素都为1吗?你为什么要为此定义一个函数?在我看来,您正在翻译另一种语言,并且缺少 MATLAB 语言的基本概念。如果是这种情况,我建议您查看the excellent "MATLAB basics" tutorials that The MathWorks has put out
  • @CrisLuengo 定义这样的函数有点奇怪,但我正在编写一种有限差分方法来解决 -y''(x)+p(x)y'(x )+q(x)y(x) = f(x),在特定情况下 p(x) =0 和 q(x) =1。在我的整个函数中,我将函数 q(x) 应用于一个数组,但是当我采用 q=constante 时,它​​返回一个常量而不是数组(我想要数组中的一行)。此外,自相矛盾的是,如果 f(x)= x+1 并且我将 f 应用于一个数组,它会返回一个数组...
  • 这并不矛盾。在 MATLAB 终端中键入 1。它会告诉你1。输入x+1,它将显示一个与x 大小相等的数组,每个元素递增1。这就是MATLAB 的工作原理。以VolkanOzcan showed below 的方式实现您的功能。

标签: arrays matlab function


【解决方案1】:

q 需要一种方法来理解输出大小。

q=@(x) zeros(size(x))+1;
q(1:10)

【讨论】:

  • 不知道为什么这被否决了,我认为它符合 OP 的要求。但是zeros(...)+1ones(...) 是一样的。
  • 我以为他可能想做些别的事。
  • 是的,这可能是真的。
【解决方案2】:

是的,您的函数是一个常量,但您的输入中没有“x”,因此它为任何输入返回常量值。试试:

q=@(x) x.*0+1

在这种形式下,您的函数只会以任何形式(向量、矩阵或常量)镜像输入,这应该会给出您想要的结果:)

【讨论】:

  • 这不返回1,它返回x
  • @CrisLuengo,哎呀,你是对的,这就是我没有检查的结果,谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 2011-06-23
  • 2012-04-01
  • 1970-01-01
相关资源
最近更新 更多