当我在Android MATLAB中输入这些代码时,我得到了错误的答案:
syms x
limit((sin(x)-sin(1))/(x-1),x,1)
它返回NaN,但在数学上应该是cos(1),但我在Android中的MATLAB没有抛出任何警告或异常。
我不太会使用MATLAB,所以我不知道是我的代码错误还是我的MATLAB在Andriod中不能正常工作。(我最近不能在PC上使用MATLAB)
如果是前者,请告诉我为什么它是错误的,我应该做些什么来修复它。
我的英语水平和我的MATLAB水平一样,这是我第一次在这个网站上提问。如果我在礼貌和规范方面有任何错误,我很抱歉。
1条答案
按热度按时间tuwxkamq1#
你是对的,结果是
NaN
,这也是matlab桌面版的情况。这是混合数字和符号计算的危险之一,就像matlab所做的那样。问题是matlab不知道将
sin(1)
作为符号表达式进行计算-默认情况下,它使用双精度浮点数将所有内容计算为数字。因此,它将子表达式sin(1)
计算为一个不精确的(64位)浮点值,然后才能使用符号算法计算极限,该极限应为cos(1)
。因此,在
x = 1
处,sin(x) - sin(1)
不完全是零-子表达式sin(x)
得到符号处理,并在x = 1
处被计算为精确的真实的sin 1,而子表达式sin(1)
只是一个近似值(尽管对于几乎所有的实际用途来说都是一个很好的近似值),但不完全是实数。解决方案是写
sin(sym(1))
而不是sin(1)
,因此第二项也被视为符号表达式:字符串
您可以在文档的Choose Numeric or Symbolic Arithmetic章节中找到更多详细信息。
有了这样的解释,为什么结果是
NaN
而不是无穷大仍然很有趣。这实际上是符号计算部分在做它的工作:由于sin(x)-sin(1)
在x=1
处不完全为零,因此表达式没有限制,因为只有x-1
在x=1
处改变符号:型