# why plot result is different from fplot's

82 views (last 30 days)
pooneh shabdini on 4 Mar 2020
Commented: Jesus Sanchez on 5 Mar 2020
function [ Y ] = cosin( n,x)
s=size(x,2);
Y=zeros(1,s);
for i=1:n
Y=Y+((((-1)^(i-1))*(x.^((2*i)-2)))/factorial((2*i)-2));
end
end
I used this function once in plot and then in fplot:
x=-pi:pi/10:pi;
Y=cosin(600,x);
plot(x,Y) syms x
fplot(cosin(600,x)) why plot just show this small part of cos(x) and not more?

Jesus Sanchez on 5 Mar 2020
Problem solved. The problem here is the value of n. Since you wrote that n = 600, the resulting number is too big for the computer to process, which assigns an Inf value to it. This is turns makes the result be a NaN as an output.
To sum up, the operation:
x.^(2*i)
should never be allowed to have an inf value. If you try to do:
5^(2*600); % My matlab gives me an infinite value here, its too big!
So the only thing that you need is to pay attention to the value of n. I set it to 100 and it is working properly for me now:
x = [-5:0.1:5];
y = cos(x); % Matlab
n = 100;
Y = cosin(n,x); % Own
figure
hold on
plot(x,y,'.-');
plot(x,Y);
legend('cos(x)','cosin(x)');
hold off
function [ Y ] = cosin( n,x)
s=size(x,2);
Y=zeros(1,s);
for i=0:n-1
%Y=Y+((((-1)^(i-1))*(x.^((2*i)-2)))/factorial((2*i)-2));
Y=Y+(((-1).^(i)).*(x.^(2.*i)))./factorial(2.*i);
end
end
##### 2 CommentsShowHide 1 older comment
Jesus Sanchez on 5 Mar 2020
If I understood the reference page, its because MATLAB uses n=23 as starting point and then performs an adaptive study of the solution, to find an optimal value Reference so I guess they force it to be less than that limit.

Jesus Sanchez on 4 Mar 2020
For plot, you wrote that x is defined between -pi and pi.
For fplot, you can see the reason in its reference page
fplot(f) plots the curve defined by the function y = f(x) over the default interval [-5 5] for x.
pooneh shabdini on 5 Mar 2020
I'll be thankful ?