【问题标题】:Evaluating a constant anonymous function in MATLAB在 MATLAB 中计算常量匿名函数
【发布时间】:2015-11-22 19:04:34
【问题描述】:

在Matlab中,我一般做的事情比如

f  = @(x) x.^2;
xx = 0:.1:1;
ff = f(xx);

所以 f 是一个函数句柄,并且 xx 和 ff 都是 1x11 向量。

但是,如果由于某种原因我需要像这样定义我的函数句柄 f

f  = @(x) 1;

并且不要更改 xx 和 ff 的代码,那么 xx 仍然是一个向量,但 ff 不会:它将是一个双精度数。

这当然很烦人,因为我的代码的后续假设 ff 是一个 11x1 向量,所以每当 f 恰好是常量时,我​​都需要更改我的代码。

所以我的第一个问题是我的代码一开始是否合理。 如果是这样,我应该怎么做才能使其在“常量 f”情况下工作? 如果没有,我应该如何重写?

这无疑类似于 matlab constant anonymous function returns only one value instead of an array 但我在那个帖子中找不到答案。

【问题讨论】:

  • 你不需要f=@(x) ones(size(x));吗?

标签: matlab function-handle


【解决方案1】:

对您链接的答案稍作修改将提供所需的结果:

f = @(x) ones(size(x));

f(x) 的大小将与输入 x 的大小相匹配,因为 f 输出一个与 x 大小相同的向量。

【讨论】:

  • 谢谢。这行得通,但没有其他方法吗?
  • @Tom 为什么应该有?您希望您的函数返回一个与 x 大小相同但仅包含值 1 的向量。正是 ones(size(x))
  • @Tom 我不明白你为什么需要别的东西。 ones(size(x)) 是您原始方法的概括,因为在 MATLAB 中,1 在大多数实际用途中等于 ones(1)
【解决方案2】:

我找到了一种更好的方法。这表明 Matlab 是多么愚蠢:

f  = @(x) (x-x)+1

试试吧!

【讨论】:

    猜你喜欢
    • 2016-05-08
    • 2016-03-14
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多