2013-12-23 40 views
1

我正在參加MATLAB課程並編寫了下面的代碼。一個是FOR LOOP,另一個是矢量化。 FOR LOOP返回正確的結果,但矢量化沒有。任何人都可以告訴我我編碼不正確嗎?MATLAB矢量化代碼返回錯誤結果

應該用於下面的等式。

1 - 1/3 1/5 + - + 1/7 1/9 - ... - 一千〇三分之一(總和爲0.7849 - 收斂 慢慢到pi/4)

for循環

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)]) 

回答

1

在量化代碼,更換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

你既可以改變你在你的總和(as suggested by Luis)使用的公式,或者你可以讓你的公式,只是改變你拿在n矢量這步長:

n = 1:4:1003;