2013-11-24 76 views
0

我有,而等於這種功能的一些問題:Matlab的餘弦錯誤

function czeb() 
k = 1:1:5; 
Xk = cos((pi*(k-0.5))/5); 
CN(5,Xk) 
end 

function c = CN(N,x) 
a=N*acos(x); % a is equal correct 
c = cos(a); % buc c not, why? 
return 
end 

如果我查看變量CN函數中我收到 a=[1.5708, 4.7124, 7.8540, 10.9956, 14.1372] 這是在CN功能正確包子下一步就是計算COS(a)中。

在此步驟中,我收到cos(a)的錯誤值。

應該 cos(a) = 1.0e-04 *[-0.0367,0.1102,-0.1837,0.2571,-0.3306]

,但它是1.0e-15 * [-0.8269,-0.1837,0.3062,-0.4286,0.5511],我不知道爲什麼...

+3

我不知道你在這裏問什麼。 – Bernhard

+0

如果你在CN a中啓動該函數,a將會是一個類似a = [1.5708 4.7124,7.8540,10.9956,14.1372],cos(a(1))= -3.6732e-06的矢量,但CN函數接收1.0e-15 * -0.8269 – PatLas

+1

PatLas,請編輯您的問題,以清楚地說明您的預期以及爲什麼和取而代之。 –

回答

1

有一個很簡單的解釋,你的功能是沒有錯的。

a=[1.5708, 4.7124, 7.8540, 10.9956, 14.1372] 

等於pi/2 + k * pi。當你取a的餘弦時,你只會得到零。 1.0e-15 * 0.8269基本上爲零(浮點算術和舍入誤差)。

1

我想我明白你的意思。你有沒有創建預期值手冊,如cos(1.5708)?如果是的話,那麼你總是會收到不同的結果,你的計算機會得到結果。所以,我認爲,你的期望值數組a是不正確的。

首先,能夠在MATLAB /八度長的數字格式:

format long; 

之後,如果你顯示你a數組,你會看到類似的輸出:

> a 
a = 
    1.57079632679490 4.71238898038469 7.85398163397448 10.99557428756428 14.13716694115407 

正如你看到的在這一步中,MATLAB/Octave的期望值和計算值是不同的。比如,如果你做cos(1.57079632679490),結果將會如-3.49148336110938e-15,正如你所看到的,這與cos(a(1))的結果很接近:-8.26948102009006e-16。這意味着,您存儲的號碼與您在輸出中看到的號碼不同。

按照您的預期,而不是得到了相同的結果 - 圓你a第四號逗號後:

a = round(a*10000)/10000; 

有了這個計算結果應該是接近你的預期效果。