matlab比较差异
Posted
技术标签:
【中文标题】matlab比较差异【英文标题】:matlab comparision difference 【发布时间】:2013-09-19 15:27:50 【问题描述】:if tf < max(arr)
对比。 if all(tf < max(arr))
-
它们有什么区别
推荐哪一种。
它们是否完全相同?
我在第一个使用 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
【问题讨论】:
【参考方案1】:如果numel(max(arr))
是1
,它们是相同的。如果不是,那么如果tf < max(arr)
将只考虑第一个最大值。但由于所有max(arr)
元素都将具有相同的值,它仍然可以工作。
但是,如果您使用的函数可能会返回不同的值,例如简单地
if tf < arr
与 if all(tf < arr)
那么它们是不同的。 if all(tf < arr)
按预期工作,如果必须小于 arr
的每个元素。但是if tf < arr
变成了类似于if [true false true false false...]
的东西,并且(感谢 Amro 指出这一点)Matlab 只会在它既非空且所有元素都非零时才认为这是真的。所以在我编造的例子中,它将是false
。所以这个故事的寓意是不要在 Matlab 中给if
一个多元素矩阵。所以我会选择if all(tf < 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 的上下文中进行讨论,这可能对其接受的内容有更严格的条件以上是关于matlab比较差异的主要内容,如果未能解决你的问题,请参考以下文章