所以我用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);
答案 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
但如果你这样做,我会想知道你为什么一开始就使用符号数学,如果可以用更快的双精度来做所有事情。
请记住,如果要转换为任何类型的十进制形式,变量精度或浮点数,在许多情况下将失去精度。但是,如果您只想查看结果或执行第二次计算(如果是双精度),则应该没问题。