【问题标题】:matlab comparision differencematlab比较差异
【发布时间】:2013-09-19 15:27:50
【问题描述】:

if tf < max(arr) 对比。 if all(tf < max(arr))

  1. 它们有什么区别
  2. 推荐哪一种。
  3. 它们是否完全相同?

我在第一个使用 matlab 编码器时遇到错误!

编辑

我有

if (xf-x0 < small_dist)&&(v0 <= min(vmax0, vmaxf))

并考虑将其更改为

leftCmpStatement = all((xf-x0 < small_dist));
rightCmpStatement = all((v0 <= min(vmax0, vmaxf)));
if leftCmpStatement && rightCmpStatement

因为 matlab 编码器抱怨 并不是每个元素都是1X1 double variable

【问题讨论】:

    标签: matlab conditional-statements matlab-coder


    【解决方案1】:

    如果numel(max(arr))1,它们是相同的。如果不是,那么如果tf &lt; max(arr) 将只考虑第一个最大值。但由于所有max(arr) 元素都将具有相同的值,它仍然可以工作。

    但是,如果您使用的函数可能会返回不同的值,例如简单地 if tf &lt; arrif all(tf &lt; arr) 那么它们是不同的。 if all(tf &lt; arr) 按预期工作,如果必须小于 arr 的每个元素。但是if tf &lt; arr 变成了类似于if [true false true false false...] 的东西,并且(感谢 Amro 指出这一点)Matlab 只会在它既非空且所有元素都非零时才认为这是真的。所以在我编造的例子中,它将是false。所以这个故事的寓意是不要在 Matlab 中给if 一个多元素矩阵。所以我会选择if all(tf &lt; max(arr)) 只是为了符合该规则。

    【讨论】:

    • 我会测试并找出答案
    • 这其中最重要的部分是...Matlab 只会考虑第一个元素。
    • @Frederick:这是不正确的,例如if [true false true], disp('hi'), end 不会评估为真。根据doc if:“当结果为非空且包含所有非零元素(逻辑或实数)时,计算表达式为真。否则,表达式为假。”
    • @Amro 我测试过,你是对的,但在那种情况下,有什么区别?因为文档基本上是说他们将相当于 and all 应用于条件?
    • @Dan:也不完全是这样;请注意 all([])true 但根据前面的引用 if [], 1, end 评估为假...我知道,这是 MATLAB 的一个令人困惑的部分 :) 还有更多这些“奇怪”的案例!提醒您一下,OP 专门在 MATLAB Coder 的上下文中进行讨论,这可能对其接受的内容有更严格的条件
    猜你喜欢
    • 2014-07-22
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    相关资源
    最近更新 更多