2015-08-24 3 views
0

Я изменил код греха (х) из книги Отто, чтобы получить соз (х), и я сделал следующее:Этот код не дает мне соз (х) в Matlab

v=0.:0.25:0.75; 
cosx=zeros(size(v)); 
N=10; 
range=0:N; 
ints=2*range; 

for n=range 
    cosx=cosx + (-1)^n*v.^ints(n)/factorial(ints(n)); 
end 

Но что это дает 0 всюду.

Может кто-нибудь помочь мне исправить это, пожалуйста? Большое спасибо

+2

@ user162343 - 'cosx = 0;', а не 'cosx = нули (размер (v));'. Вы вычисляете приближение рядов Тейлора на 'cos (x)', и поэтому вы постепенно добавляете условия возрастающего порядка. – rayryeng

+0

Так вы можете отправить правильный код, пожалуйста;) – user162343

ответ

3

Вы должны изменить две вещи в коде, чтобы получить правильное расширение серии Taylor. Вот код. Обратите внимание на изменения.

v=0:0.25:0.75; 
cosx=zeros(1,size(v,2)); %Now, it's a vector 
N=10; 
range=0:N; 
ints=2*range; 

for n=range 
    cosx=cosx + (-1)^n*v.^ints(n+1)/factorial(ints(n+1)); % replace n by n+1,   
                 % MATLAB indexing starts from 1. 
end 
+0

Большое спасибо за это :) и еще один вопрос, как вы можете это сделать без преобразования нулей в вектор? – user162343

+0

Parag, вы можете сэкономить некоторое время вычисления, сохранив значение previous_value = 'factorial (ints (n + 1))' и вместо пересчета просто умножьте 'previous_value' на' ints (n + 1) * (ints (n + 1) -1) ' –

+0

@CarlWitthoft Да. Я просто попытался внести минимальные изменения в его код. –

Смежные вопросы