MATLAB控制運算精度

先來看一段MATLAB代碼


 

  clear;

  theta = 264.3783;
  t1 = [cos(theta); cos(2*theta); cos(3*theta); cos(4*theta); sin(theta); sin(2*theta); sin(3*theta); sin(4*theta); 1]; 
  t2 = [0.8849    0.5661    0.1170   -0.3591    0.4658    0.8243    0.9931    0.9333    1.0000]';
     
  Ximage = [7.8013 -10.5825 -12.7495 4.8067 16.3082 7.2674  1.5018  0.0946 -12.8618]';
    

  result1 = t1'*Ximage;

  result2 = t2'*Ximage;


 

在MATLAB控制檯下查看t1與t2的值是一樣的,但是結果卻相差很多:

result1 與result2 的值符號都變了,這是爲什麼呢?

 

原來MATLAB顯示數據時,默認現實小數點後面4位,但實際運算所使用的精度並不是這樣。
所以上述的t1和t2在計算時候,值並不相等; 之所以result1和result2符號都發生改變,是因爲Ximage裏某些值比較大的緣故。
其實這兩個值,都是非常靠近原點0的兩個值。

 

MATLAB中控制運算精度

 

format long 只能設置顯示精度,並不能控制運算精度。
在MATLAB中,控制運算精度一般使用 digits 和 vpa。示例:

 

digits(n)    %設定默認的精度
vpa(x,n)    %表示將s表示爲n位有效數的符號對象
如果不設定digits(n)  ,系統默認爲32位

 

需要注意:

1,vpa算出的值爲符號變量,可以進行初等運算,但不能進行關係運算等;

2,vpa的運算速度比MATLAB標準函數要慢

 

MATLAB中四捨五入

採用函數 roundn(x,y) 例子

a=123.4567890;
a=roundn(a,-4)

% 返回 123.4568

發佈了8 篇原創文章 · 獲贊 6 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章