2013-02-19 219 views
3

我意識到這是一個有點模糊的問題,所以我會盡我所能。如果我有一個像n = 0.783325849821429這樣的數字,有沒有辦法顯示更多小數位?這是用長格式生成的。問題是我正在用正弦進行誤差估計計算,並且出現了一個點,其中估計與真正的正弦值非常接近,以至於MATLAB將誤差計算爲0,即使估計不可能完全準確。總是有錯誤,對於MATLAB來說它太小了。有沒有辦法讓MATLAB考慮更多的小數位?如何增加MATLAB中的位數?

回答

1

使用digitsvpa(可變精度準確)。更多關於可變精度算術here ...請注意,您需要符號數學工具箱。如果你沒有,那麼你可以使用約翰D'ERRICO的Variable Precision Integer Arithmetic從文件交換..

+1

實際上,VPI是唯一整數。不過,我也發佈了一個HPF工具,它將以浮點數計算任意數量的數字。所以如果你想要100個數字的精度,你可以得到它。 http://www.mathworks.com/matlabcentral/fileexchange/36534-hpf-a-big-decimal-class – 2013-02-19 11:16:21

3

可以使用formatted strings

fprintf(1, 'n = %.20f\n', n); % print with 20 digits after the decimal point 

總是要求更多的數字然而是有一定限度以浮點數存儲的精度。
可以使用eps

eps(n) 

如果你估計誤差小於eps比你估計是機器精度內,並且不能被測量的測試機器精度。

0

如果使用VPA功能來提高精度那麼它將你作爲SYMS,之後變量如果u想使用這個變量對其他MATLAB內部函數,則它不會工作,因此找到一些其他的方式。

例如

a=vpa(a,5) 
a = 

[ 1.25, 2.0276, 3.2108, 3.3695, 2.0589, 1.0] 

polyval(a,3) 

??? Undefined function or method 'isfinite' for input arguments of type 
'sym'. 

Error in ==> polyval at 54 
if isscalar(x) && (nargin < 3) && nc>0 && isfinite(x) && 
all(isfinite(p(:))) 
0

例如,爲了獲得與1000位的答案的22/7

數字(1000)的公式

VPA(22/7)