2013-12-23 4 views
1

Я беру курс MATLAB и написал следующий код. Один из них - FOR LOOP, а другой - векторизация. FOR LOOP возвращает правильный результат, но векторизация этого не делает. Может ли кто-нибудь сказать мне, что я неправильно закодировал?MATLAB векторизованный код возвращает неправильный результат

Должно быть для следующего уравнения.

1 - 1/3 + 1/5 - 1/7 + 1/9 - ... - 1/1003 (сумма 0,7849 - сходится медленно до пи/4)

ИСПОЛЬЗОВАТЬ ДЛЯ LOOP

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

USE векторизация

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; 
Смежные вопросы