why plot result is different from fplot's

162 visualizaciones (últimos 30 días)
pooneh shabdini
pooneh shabdini el 4 de Mzo. de 2020
Comentada: Jesus Sanchez el 5 de Mzo. de 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)
result of plot was this shape:
syms x
fplot(cosin(600,x))
the result of fplot was this:
why plot just show this small part of cos(x) and not more?

Respuesta aceptada

Jesus Sanchez
Jesus Sanchez el 5 de Mzo. de 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 comentarios
pooneh shabdini
pooneh shabdini el 5 de Mzo. de 2020
Thank you:) Do you know why plot can't compute this big n=600 but fplot can?
Jesus Sanchez
Jesus Sanchez el 5 de Mzo. de 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.

Iniciar sesión para comentar.

Más respuestas (1)

Jesus Sanchez
Jesus Sanchez el 4 de Mzo. de 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.
  6 comentarios
Jesus Sanchez
Jesus Sanchez el 5 de Mzo. de 2020
I saw the result in matlab and it is indeed strange. The Taylor expansions resulting of Y gives "NaN" as a result for values of x that are not cointained within [-pi, pi].
The only mistake that I can see is that you have not written i-1 everywhere, so you are not implementeing correctly the function. I will give it more thought later!
pooneh shabdini
pooneh shabdini el 5 de Mzo. de 2020
I'll be thankful ?

Iniciar sesión para comentar.

Categorías

Más información sobre Line Plots en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by