在MATLAB(Android)中计算三角常数函数极限时的问题

aiqt4smr  于 2023-08-06  发布在  Matlab
关注(0)|答案(1)|浏览(171)

当我在Android MATLAB中输入这些代码时,我得到了错误的答案:
syms x
limit((sin(x)-sin(1))/(x-1),x,1)
它返回NaN,但在数学上应该是cos(1),但我在Android中的MATLAB没有抛出任何警告或异常。
我不太会使用MATLAB,所以我不知道是我的代码错误还是我的MATLAB在Andriod中不能正常工作。(我最近不能在PC上使用MATLAB)
如果是前者,请告诉我为什么它是错误的,我应该做些什么来修复它。
我的英语水平和我的MATLAB水平一样,这是我第一次在这个网站上提问。如果我在礼貌和规范方面有任何错误,我很抱歉。

tuwxkamq

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),因此第二项也被视为符号表达式:

syms x

limit((sin(x)-sin(sym(1)))/(x-1), x, 1)  % cos(1)

字符串
您可以在文档的Choose Numeric or Symbolic Arithmetic章节中找到更多详细信息。
有了这样的解释,为什么结果是NaN而不是无穷大仍然很有趣。这实际上是符号计算部分在做它的工作:由于sin(x)-sin(1)x=1处不完全为零,因此表达式没有限制,因为只有x-1x=1处改变符号:

limit((sin(x)-sin(1))/(x-1), x, 1, 'left') % -Inf
limit((sin(x)-sin(1))/(x-1), x, 1, 'right') % +Inf

相关问题