Matlab余弦错误

时间:2013-11-24 11:23:04

标签: matlab cosine

我在遇到以下功能时遇到了一些问题:

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],我不知道为什么......

2 个答案:

答案 0 :(得分:1)

有一个非常简单的解释,你的功能没有错。

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

等于pi/2 + k * pi。当你取a的余弦时,你就会得到零。 1.0e-15 * 0.8269基本上为零(浮点运算和舍入误差)。

答案 1 :(得分:1)

我想,我理解你的。您是否已创建预期值手册,例如cos(1.5708)?如果是,那么您将始终收到与计算机结果不同的结果。所以,我认为,数组a的预期值是不正确的。

首先,在MATLAB / Octave中启用长数字格式:

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;

有了这个,计算结果应该接近你的预期结果。