如何让MATLAB以小数形式显示答案,而不是分数

时间:2015-03-02 06:13:43

标签: matlab symbolic-math

所以我用MATLAB来计算方程的系数,它一直显示分数作为常数而不是像xxe-x那样的十进制形式 我的代码在

之下
bt = 0.03175;
bpzt = 0.0078;
ht = 0.003;
w = 50; % frequency in Hz
pnic = 8908; % density of nickel
Enic = 200e9; % Young's modulus of nic
L = 0.3048; % Length of canitlever beam in m

syms hn

inertia = (1/12)*bt*ht^3 + (1/2)*bpzt*ht^2*hn - (1/2)*bpzt*ht*hn^2 + (2/3)*bpzt*hn^3

area = (bt*ht - 2*hn*bt + 2*bpzt*hn);

2 个答案:

答案 0 :(得分:1)

您正在使用符号数学工具箱。您必须将任何符号变量转换回数字变量。使用double(area)获取符号变量area的双精度值。您也可以使用函数single。 但请注意,hn必须先获取值,否则无法确定。

文档:http://www.mathworks.com/help/symbolic/double.html

要格式化此输出,请使用常用的Matlab工具。在您的情况下format short e

更多详情:http://www.mathworks.com/help/matlab/matlab_prog/display-format-for-numeric-values.html

答案 1 :(得分:1)

在R2014b中,这一行:

inertia = (1/12)*bt*ht^3 + (1/2)*bpzt*ht^2*hn - (1/2)*bpzt*ht*hn^2 + (2/3)*bpzt*hn^3

返回

(13*hn^3)/2500 - (863307622649607*hn^2)/73786976294838206464 + (5304162033559185*hn)/151115727451828646838272 + 5527208847278085/77371252455336267181195264

这是一个符号表达式,其数值完全表示为有理分数(即使它们可能在代码中以十进制值开头)。您可以使用vpa

进行转换
vpa(inertia)

返回:

0.0052*hn^3 - 0.000011699999999999999788190263583232*hn^2 + 0.000000035099999999999996664653271376613*hn + 0.000000000071437500000000005341045287673881

小数值的长度/精度取决于digits。以指数样式格式(xxe-x)显示它不是任何符号数学表达式或值的选项,除非您编写自己的函数来解析字符串并进行转换。

要将其转换为矢量化双精度浮点函数,您可以使用名称极为明显的matlabFunction - matlabFunction(inertia)返回:

@(hn)hn.*3.51e-8-hn.^2.*1.17e-5+hn.^3.*5.2e-3+7.143750000000001e-11

但如果你这样做,我会想知道你为什么一开始就使用符号数学,如果可以用更快的双精度来做所有事情。

请记住,如果要转换为任何类型的十进制形式,变量精度或浮点数,在许多情况下失去精度。但是,如果您只想查看结果或执行第二次计算(如果是双精度),则应该没问题。