如何阻止符号工具箱将数字转换为分数



我发现matlab符号工具箱可以自动将数字转换成分数。这对于短期来说是可以的,但对于复杂的问题,这可能会导致更长的期限和更高的计算成本。

让我们用一个简单的例子来描述它:

syms x
a=0.1; % a is double
b=a*x;

结果:

b=
x/10

但我不希望Matlab以这种格式转换结果是否有任何方法使Matlab停止这样做?(我不想使用vpa再次转换结果)。

根据sym的文档,数值的默认转换方法是有理数近似/表示,即'r'标志。如果您想使用十进制近似值/表示,那么您需要直接指定。但是,应该注意如何执行此操作,如下面的示例所示:

syms x
b1 = sym(0.1,'d')*x
b2 = sym('0.1')*x

返回

b1 =
0.10000000000000000555111512312578*x

b2 =
0.1*x

如你所知,许多浮点数是不精确的。sym(0.1,'d')使用0.1的浮点值作为digits的长度。Matlab可能选择了另一种方法作为默认值,因为这种表示不容易与浮点数混淆。

如果您想使用sym更自动地将浮点值转换为"精确"十进制表示,您可以尝试这样做:

syms x
a = 1e-26;
b1 = sym(a,'d')*x
b2 = sym(sprintf('%g',a))*x

返回

b1 =
0.000000000000000000000000010000000000000000384948697491918*x

b2 =
0.00000000000000000000000001*x

然而,我不确定你对vpa有什么反对意见,因为它实际上是一种更干净的方式:b1 = vpa(a)*xb1 = vpa(a*x)

>> syms a;
>> h = (1/3)*a;
>> disp(vpa(h,4));
0.3333*a

最新更新