2015-03-02 86 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 

但是,如果你這樣做,我不知道你爲什麼他們一開始就是在用符號數學來工作,如果能夠以更快的雙精度完成所有工作的話。

請記住,如果你想轉換成任何一種小數形式,變精度或浮點數,在很多情況下你會失去精度。但是,如果你只是想查看結果或執行第四次計算如果雙精度,那麼它應該沒問題。