Finding an approximation for cos(x) using for loops

28 vues (au cours des 30 derniers jours)
Laura
Laura le 17 Nov 2013
Hi there,
I recently got help on creating a script to calculate the value of cos(x) using for loops. The question asks:
"Write a script which will calculate the value of cos(x) (ask the user for the value of x and n):
cos(x)=( from k=1 –> n )∑(-1) ̂(k-1)(x ̂(2(k-1))/(2(k-1))!)
" I had real problems getting the answer and so asked a tutor to help me with it. She managed to get the code working but I failed to understand how it actually works. (her explanation was not very clear)
So, I have sat staring at it for ages and it still doesn't make sense to me.
Here it is:
% Ask user for values x, n
x=input('Please enter a value for x: '); %cos angle
x_rad=x*pi/180;
n=input('Please enter a value for n: '); %nth term
%factorial
fact=1;
sum=0;
for k=1:n
initial=-1;
for a=0:(k-1)
initial=(-1)*initial;
end
numerator=1;
for b=1:2*(k-1)
numerator=numerator*x_rad;
end
for t=1:2*(k-1)
fact=fact*t;
end
total=(initial*numerator)/fact;
sum=sum+total;
end
fprintf('cos(%d)=%6.6f \n',x,sum);
Can anyone explain how this code is working in the for loop? I am so confused.
Also, any advice on a simpler way to do this?
Thanks so much, Laura
  2 commentaires
Walter Roberson
Walter Roberson le 17 Nov 2013
Which "for" loop ?
Laura
Laura le 17 Nov 2013
All of them. I don't understand why we need nested for loops in the first place and why the end values for each one is different. (e.g. for b=1:2*(k-1))

Connectez-vous pour commenter.

Réponse acceptée

Umair Nadeem
Umair Nadeem le 17 Nov 2013
Modifié(e) : Umair Nadeem le 17 Nov 2013
The code has been developed using a more complex approach. You can simply implement the equation you gave above. Here is how to do it.
% Ask user for values x, n
x=input('Please enter a value for x: '); %cos angle
x_rad=x*pi/180;
n=input('Please enter a value for n: '); %nth term
% Initialize resultant variable
sum=0;
for k=1:n
initial = (-1)^(k-1);
numerator = x_rad^(2*(k-1));
denominator = factorial(2*(k-1));
total=(initial*numerator)/denominator;
sum=sum+total;
end
fprintf('cos(%d)=%6.6f \n',x,sum);
It will give the same result. You dont have to use nested for loops to calculate the values of ^ (to the power), you can do it right away.
Hope it helps
  1 commentaire
Weeraphol Egsaphung
Weeraphol Egsaphung le 23 Sep 2017
Hi, I wonder the value of >> fprintf('cos(%d)=%6.6f \n',x,sum); if I want it sin How could I use the code

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by