2015-03-02 89 views
1

因此Im使用MATLAB来计算方程的系数,它继续显示馏分作为常量代替小数形式等XXE-X 我的代码是下面如何在小数MATLAB显示答案随e代替馏分

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); 

回答

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

+0

我不断收到一个错误,说mupadmex错误时使用双或单,并建议我使用VPA。当我使用vpa它在向我展示小数点后工作,但随后小数点没有很好地格式化,就像我会得到一个0.0000000000000001而不是我想要的东西像1e-9 – Edwardnese 2015-03-02 06:39:40

+0

这家伙偷走了我的答案。 – erip 2015-03-02 06:48:48

+0

@erip:这不是“你的”答案,而是“答案”。顺便说一句,我独立查看它,你甚至可以看到我在文档中找到它的位置。 – usr1234567 2015-03-02 06:58:36

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 

但是,如果你这样做,我不知道你为什么他们一开始就是在用符号数学来工作,如果能够以更快的双精度完成所有工作的话。

请记住,如果你想转换成任何一种小数形式,变精度或浮点数,在很多情况下你会失去精度。但是,如果你只是想查看结果或执行第四次计算如果双精度,那么它应该没问题。