为什么答案3 < A < 7出乎意料?
网上已经有无数次了(不是真的!)MATLAB新闻组标题中所写的问题已经被问到(并回答)。让我们通过代码来理解发生了什么。
免责声明:我无意在这篇文章中讨论非标量行为。
目录
问题陈述
作为程序的一部分,假设我们需要查看某个值是否位于两个值之间。假设A.我们在极限处检查的值是多少低= 3和高= 7.
低= 3;高= 7;
从数学上讲,你可以这样写
低让我们试试看A.范围内和范围外的值。让我把这个表达式放到一个匿名函数中,这样我就不必重复它了。
myExpr=@(x)低 inResult=1 outResult=1什么? ?
不可能两者都是圆周率和17隔3.和7.. 发生了什么事?让我们分析一下这个表达式。
表达式第一部分:low < A
让我们看一下表达式的第一部分。
步骤1IN=低 step1In = 1 step1Out = 1我们看到这对我们的两个输入都成立。
表达式的第二部分:以前的输出<高
表达式的第二部分使用第一个表达式的输出并从那里继续。
step2In = step1In < high . (step2Out = step1Out < high .step2In = 1 step2Out = 1我们看到这两个都有一个,或者都是真的,发生了什么?
看看这些类型
谁step1 *
Name Size Bytes Class Attributes step1In 1x1 logical step1Out 1x1 logical . Name Size Bytes Class Attributes第一步的结果是符合逻辑的——这些数字是否大于低? 我们两种价值观的答案都是肯定的,或者符合事实的,在MATLAB中表示为逻辑值。当我们在第二步将这些值作为输入时,所发生的是符合事实的值被解释为值为1的数字输入。然后我们问1是否小于高的.这两种情况都是如此!
如何得到预期答案
我们如何得到期望的答案,这很简单。我们简单地组合两个逻辑表达式,但方式不同于上面。
myExprCorrect=@(x)(低 myExprCorrect=@(x)(低我们所做的是首先检查数字是否大于低并分别与高的. 在得到两个合乎逻辑的答案后,我们将它们结合起来。对于介于低和高的因此,结果应该是令人满意的符合事实的只有在这些条件下。
无论如何,我总是使用括号来对表达式进行分组,使它们对我来说非常易读,这样我就不需要在以后考虑我打算测试什么。
复合表达给你带来麻烦了吗?
请让我知道在这里如果你对这篇文章中的表达有困难。
- 类别:
- 常见的错误
评论
要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。