如何阻止符号工具箱将数字更改为分数?

时间:2014-05-25 07:41:56

标签: matlab symbolic-math

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

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

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

结果:

b=

x/10

但是我不希望Matlab以这种格式转换结果有没有办法让matlab停止这样做? (我不想再使用vpa来转换结果。)

2 个答案:

答案 0 :(得分:2)

根据sym的文档,数值的默认conversion method是有理逼近/表示,'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')使用the floating-point value of 0.1digits。 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)

答案 1 :(得分:0)

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