我发现matlab符号工具箱会自动将数字转换为分数。对于短期而言这是可以的,但对于复杂的术语,这可能会导致更长的术语和更高的计算成本。
让我们用一个简单的例子来描述它:
syms x
a=0.1; % a is double
b=a*x;
结果:
b=
x/10
但是我不希望Matlab以这种格式转换结果有没有办法让matlab停止这样做?
(我不想再使用vpa
来转换结果。)
答案 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.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)*x
或b1 = vpa(a*x)
。
答案 1 :(得分:0)
>> syms a;
>> h = (1/3)*a;
>> disp(vpa(h,4));
0.3333*a