HELP!! Seriously struggling with my final MATLAB assignment! I've been doing it for over 6 hours now and I'm ridiculously stuck :( if anyone could help at all I would REALLY appreciate it :( THANK YOUUU
7 views (last 30 days)
Show older comments
Clara
on 19 Mar 2015
Edited: Konstantinos Sofos
on 20 Mar 2015
Attached is my code and assignment. I haven't included cos(x) yet because I can't figure out sin(x). My code is pretty pathetic!! I understand everything we've done up to loops but this is killing me .. If anyone has any input at all I'd really appreciate it!! Thank you :)
2 Comments
Star Strider
on 19 Mar 2015
Take a deep breath and relax!
I haven’t run your code, so tell us what it’s not doing that it should, or what it’s doing that it shouldn’t.
Remember, you have to do this for (0 <= x <= 4*pi) so be sure to define your ‘x’ vector, and supply the relevant elements of it to your ‘xbsin’ calculation at each step. The assignment wants at least 20 values of ‘x’ for your code as it increases the number of terms, so define your ‘x’ vector first. Iterate through that at each step as you add terms to your series. Remember, ‘epsilon’ has to take the difference of the entire series at each step as you add terms.
I would run this on paper first, calculating it with a hand calculator for a particular value of ‘x’, perhaps pi/4 and 5*pi/4. That will give you a general idea of what you’re doing.
Stephen23
on 20 Mar 2015
Edited: Stephen23
on 20 Mar 2015
Judging by the Mfile that you attached you already know enough MATLAB code to be able to solve this yourself. The challenge for you now is not writing the code but rather understanding how to solve the problem. Yes, there is a big difference between these! Break the problem down and do not try to write a whole page of code without actually knowing how it really works... this is doomed to be a struggle.
You could even, as Star Strider suggests, solve this first on some paper: go through some iterations, see what values you need to keep track of and when these work successfully convert them into code form. While you are working through by hand, consider which values are useful to keep, give them sensible names and write them out in a table. You can compare these with your code later.
You goal now is not code writing but to figure out an algorithm, and this is much more abstract thinking... but being systematic and using all of your available resources will get you there :)
I highly recommend reading the book "How to Solve It" by George Polya, which gives very good advice on how to approach problem-solving tasks like this one: note that the book's first principle is also "Understand the problem".
Accepted Answer
Konstantinos Sofos
on 20 Mar 2015
Edited: Konstantinos Sofos
on 20 Mar 2015
Hi,
I agree fully with the above comments. Take a deep breath and relax! and that by the Mfile that you attached you already know enough MATLAB code. I will give you my solution but be sure that you have to understand the problem and how someone can formulate it into a program. This is the final scope of this assignment.
function [sinx,error] = sinx_approx(x,n)
% Approximates the value of sin(x), the approximation is more accurate as
% the number of terms selected is increased.
%
% INPUTS
% x range of integration
% n Up to how many terms would you like to evaluate?
% OUTPUTS
% sinx approximation of sin(x)
% error tollerance error
sinx=0;
error = 1;
mytol = 0.001;
while error > mytol
temp=sinx;
for i=1:n
sinx=(-1)^(i+1) * x.^(2*i-1)/ factorial(2*i-1)+ sinx;
error=abs(sinx-temp);
end
end
And for the cosine
function [cosx,error] = cosx_approx(x,n)
% Approximates the value of cos(x), the approximation is more accurate as
% the number of terms selected is increased.
%
% INPUTS
% x range of integration
% n Up to how many terms would you like to evaluate?
% OUTPUTS
% cosx approximation of sin(x)
% error tollerance error
cosx=1;
error = 1;
mytol = 0.001;
while error > mytol
temp=cosx;
for i=1:n
cosx=(-1)^(i) * x.^(2*i)/ factorial(2*i)+ cosx;
error=abs(cosx-temp);
end
end
Then is the main function which calls the above and plot the result
%--Assignment5.m
%
% Description: This program estimates the values for sin(x) and cos(x) for
% x, in the range of [0,4pi]. This program also displays the approximate
% and exact values of sin(x) and cos(x) in a graph.
clear;
clc;
% Generating 20 values of x between 0 and 4pi.
x = linspace(0,4*pi,20);
% Approximate sinx and cosx
sinx = sinx_approx(x,20);
cosx = cosx_approx(x,20);
% plot
subplot(1,2,1)
h1 = plot(x,sinx);axis tight;grid on
set(h1,'Marker','.','Color','red','MarkerSize',15)
hold on
plot(x,sin(x),'b--');
title('Sine')
legend({'Approximated','Exact'})
subplot(1,2,2)
h2=plot(x,cosx);axis tight;grid on
set(h2,'Marker','.','Color','red','MarkerSize',15)
hold on
plot(x,cos(x),'b--');
title('Cosine')
legend({'Approximated','Exact'})
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/174035/image.jpeg)
%
4 Comments
Konstantinos Sofos
on 20 Mar 2015
Edited: Konstantinos Sofos
on 20 Mar 2015
Hi,
I cannot understand where are you struggling. Why have you changed the sinx_approx and cosx_approx functions and you ask for x,n again as inputs from the command line from the time that you set them as inputs from the function??? If you run the attached you will have something like that
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/182407/image.jpeg)
More Answers (0)
See Also
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!