Array processing using Taylor Series and FOR Loops to approximate sin value for each element in that array.
3 views (last 30 days)
Show older comments
I am using x = [-3:0.5:3] as a test value
My code is giving correct sin(x) values for the negative part of this array. However, it gives 0's for when x goes to 0 or greater. The array can be of any type and dimensions.
Taylor Series:
function [y] = SINM(x)
%SINM This function takes the array x and processes the approximate sin
%value of it.
% The value of sin is approximately calculated using Taylor Series
% from the input array x.
Sum = zeros(size(x));
T = 1E-12; %defining tolerance.
y = zeros(size(x));
[i,j] = size(x);
for n = 0:30
for k = 1:i
for l = 1:j
an(k,l) = ((-1)^n).*((x(k,l).^((2*n)+1))./factorial((2*n)+1));
Sum(k,l) = Sum(k,l) + an(k,l);
if abs(an(k,l)) < T || n==30
break
elseif abs(an(k,l)) > T
disp 'More Iterations are needed to reach the specified tolerance.';
end
end
end
end
y = Sum;
end
This the code I have written so far, but I am confused as to why it gives the output of 0 when x >= 0. ^
How can i fix this code to get sin values for all values in the array?
This is the result I am getting.
%SINM(x)...
%More Iterations are needed to reach the specified tolerance...
%More Iterations are needed to reach the specified tolerance...
%More Iterations are needed to reach the specified tolerance...
%More Iterations are needed to reach the specified tolerance...
%More Iterations are needed to reach the specified tolerance...
%More Iterations are needed to reach the specified tolerance...
%More Iterations are needed to reach the specified tolerance...
%More Iterations are needed to reach the specified tolerance...
%...
%...
%...
%ans =
% Columns 1 through 6
% -0.1411 -0.5985 -0.9093 -0.9975 -0.8415 -0.4794
% Columns 7 through 12
% 0 0 0 0 0 0
% Column 13
% 0
6 Comments
Accepted Answer
Matt J
on 18 Oct 2021
Edited: dpb
on 18 Oct 2021
The array can be of any type and dimensions.
If so, why does your code assume it will be 2D? Can't it be 3D or 4D? In any case, consider the following modification (which will work for any dimension).
SINM(-3:0.5:3)
function [y] = SINM(x)
%SINM This function takes the array x and processes the approximate sin
%value of it.
% The value of sin is approximately calculated using Taylor Series
% from the input array x.
y = zeros(size(x));
T = 1E-12; %defining tolerance.
for i=1:numel(x)
for n = 0:30
an = ((-1)^n).*((x(i).^((2*n)+1))./factorial((2*n)+1));
y(i) = y(i)+an;
if abs(an) < T || n==30
break
elseif abs(an) > T
disp 'More Iterations are needed to reach the specified tolerance.';
end
end
end
end
4 Comments
dpb
on 19 Oct 2021
That, in conjunction with https://www.mathworks.com/help/matlab/math/array-indexing.html#MatrixIndexingExample-2
That's something newbies generally don't catch on to right off the bat...you're well ahead of the game it seems! :)
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!