先來看一段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