如何在Matlab中区分vpa和sym

如何在Matlab中区分vpa和sym,matlab,symbolic-math,Matlab,Symbolic Math,标题上已经写了。给定三个变量: d = 2; s = sym(2); v = vpa(2); 如何识别哪种变量属于哪种类型。显然,要识别双精度,我可以使用isa(d,'double')。但是我知道的所有识别符号变量的方法都不能区分vpa和sym,例如isa(s,'sym')和isa(v,'sym')都返回truevpa(2)是一个sym,正如评论中指出的那样 您正在寻找的是(R2019a中介绍的) 通过利用vpa是一个浮点数,可以在Matlab R2018b及更早版本中执行以下操作: isAl

标题上已经写了。给定三个变量:

d = 2;
s = sym(2);
v = vpa(2);
如何识别哪种变量属于哪种类型。显然,要识别双精度,我可以使用isa(d,'double')。但是我知道的所有识别符号变量的方法都不能区分
vpa
sym
,例如
isa(s,'sym')
isa(v,'sym')
都返回
true
vpa(2)
是一个sym,正如评论中指出的那样

您正在寻找的是(R2019a中介绍的)


通过利用
vpa
是一个浮点数,可以在Matlab R2018b及更早版本中执行以下操作:

isAlways( s+10^sym(-100000)==s )
isAlways( v+10^sym(-100000)==v )
第一个返回false,第二个返回true



不幸的是,这在MatlabR2020A中似乎不再有效。

vpa
生成类型为
sym
的结果。所以没有区别。它们是同一类型的,所以我的问题是。从概念上讲,它们是非常不同的---sym(2)存储精确的数字;vpa(2)是一个浮点数。
vpa(2)
是一个
sym
vpa
来自符号数学工具箱,其结果也是符号的。Sym是一个类。不管你用它存储一个浮点数还是一个整数。只是你对sym的理解是错误的。是的,确切地说,你知道一种在R2016a或R2018a中有效的方法吗?
isAlways( s+10^sym(-100000)==s )
isAlways( v+10^sym(-100000)==v )