MATLAB矢量化代码返回错误的结果

时间:2013-12-23 00:36:52

标签: matlab vectorization

我正在参加MATLAB课程,并编写了以下代码。一个是FOR LOOP,另一个是矢量化。 FOR LOOP返回正确的结果,但矢量化没有。任何人都可以告诉我我的编码错误吗?

应该是以下等式。

  

1 - 1/3 + 1/5 - 1/7 + 1/9 - ...... - 1/1003(总和为0.7849 - 收敛   慢慢地到pi / 4)

使用循环

clc
clear
tic
sign = -1;
y=0;
for x=1:2:1003
    sign=-sign;
    y=y+sign/x;
end

disp(['For Loop calculated ' num2str(y), ' and ran for ' num2str(toc)])

使用矢量化

clear
tic
n=1:2:1003;
x=sum(1./n -1./(n+2));
disp(['Vectorization calculated ' num2str(x), ' and ran for ' num2str(toc)])

2 个答案:

答案 0 :(得分:2)

在矢量化代码中,将x行替换为:

x = sum(1./n .* (-1).^(0:numel(n)-1))

1./n之后的术语负责交替符号。

现在,你的代码sum(1./n -1./(n+2))给你1 + 1/3 + 1/5 + ... + 1/1003 - (1/3 + 1/5 + ... + 1 / 1005),即(取消条款后),1-1 / 1005。

答案 1 :(得分:2)

您可以更改总结中使用的公式(as suggested by Luis),也可以保留公式,只需将n向量中的步长更改为:

n = 1:4:1003;