Finding an approximation for cos(x) using for loops

10 views (last 30 days)
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 Comments
Laura
Laura on 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))

Sign in to comment.

Accepted Answer

Umair Nadeem
Umair Nadeem on 17 Nov 2013
Edited: Umair Nadeem on 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 Comment
Weeraphol Egsaphung
Weeraphol Egsaphung on 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

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!