How to have MATLAB display answer in decimals with e instead of fractions

后端 未结 2 2033
鱼传尺愫
鱼传尺愫 2020-12-22 03:06

So im using MATLAB to calculate the coefficient of an equation and it keeps displaying fractions as the constants instead of decimal form like xxe-x My code is below

相关标签:
2条回答
  • 2020-12-22 03:31

    You are using the symbolic math toolbox. You have to convert any symbolic variable back to a numerical one. Use double(area) to get a double value of your symbolic variable area. You can use the function single, too. But be aware that hn has to get a value first, otherwise it cannot be determined.

    Documentation: http://www.mathworks.com/help/symbolic/double.html

    To format this output, use the usual Matlab tools. In your case format short e

    More details: http://www.mathworks.com/help/matlab/matlab_prog/display-format-for-numeric-values.html

    0 讨论(0)
  • 2020-12-22 03:48

    In R2014b, this line:

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

    returns

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

    which is a symbolic expression with numeric values represented exactly as rational fractions (even though they may have started out as decimal values in your code). You can convert this using vpa

    vpa(inertia)
    

    which returns:

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

    The length/precision of the decimal values depends on digits. Displaying this in an exponential-style format (xxe-x) is not an option for any symbolic math expression or value unless you write your own function to parse the string and do the conversion.

    To convert this to a vectorized double-precision floating point function, you can use the terribly-named matlabFunction – matlabFunction(inertia) returns:

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

    But if you're doing this, I'd wonder why you were working with symbolic math in the first place and if it's possible to do everything in much faster double precision.

    Keep in mind that if you want to convert to any kind of decimal form, variable precision or floating-point, in many cases you will lose precision. However, if you just want to view the result or perform fourth calculations if double precision, then it should be fine.

    0 讨论(0)
提交回复
热议问题