Plotting normal curve and a third order polynomial

11 views (last 30 days)
Hello, i'm new with matlab and i have a problem with my code, i got this
y=[70,73,62,67,70,72,67,72,71,73,70,75,66,69,67,72,67,69,71,71,68,74,73,62,65,75,67,64,72,73];
max(y);
min(y);
bins=min(y):max(y);
numel(y);
x=0:1:29;
numel(x);
polyfit(x,y,2);
best_y=-0.0030*x.^2+0.0851*x+691891;
%polyfit(x,y,3);
%best_y=(0.0011*x.^3-0.0499*x.^2+0.6198*x+68.0076);
%plot(x,best_y);
u=mean(y);
s=std(y);
normal_y=30*((exp((-(x-u).^2)/(2*s.^2)))/(s*(2*3.1416).^(0.5)));
plot(x,best_y,x,normal_y);
my first tried was with the third order polynomial and then i tried it with the second order one. when i got the graph it looked like 2 parallel lines , i know they have to be close. i dont know what is the problem with my code
thanks a lot

Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 27 May 2013
Edited: Azzi Abdelmalek on 27 May 2013
The problem is this line
best_y=-0.0030*x.^2+0.0851*x+691891;
It should be
best_y=-0.0030*x.^2+0.0851*x+69.1891;
%or
v=polyfit(x,y,2);
best_y=sum(bsxfun(@times,[x.^2;x;ones(1,numel(x))],v'))
plotyy(x,y,x,best_y)
%or for order 3
v=polyfit(x,y,3);
best_y=sum(bsxfun(@times,[x.^3; x.^2;x;ones(1,numel(x))],v'))
plotyy(x,y,x,best_y)
  2 Comments
David Sanchez
David Sanchez on 27 May 2013
p = polyfit(x,y,2); % p is an array with polynomial coefficient
best_y = p(1)*x.^2+p(2)*x+p(3); %
daniel
daniel on 27 May 2013
hello Azzi thanks for the reply.
i fixed "691891" now the top looks kinda curved but still they are apart like one on top of the graph and the other one at the bottom.
And.
best_y=sum(bsxfun(@times,[x.^2;x;ones(1,numel(x))],v'))
Well as i mentioned im really new with matlab so i got lost with that code hehe.( but thanks a lot )
the curious part is that when i plot the best_y by itself it looks good upside-down parabola) , same with the normal_y which looks like half of the normal curve. but as soon as i plotted them together one is on top semi-curve and the other one is a line at the bottom. is that ok ?
thanks guys,

Sign in to comment.


David Sanchez
David Sanchez on 27 May 2013
what's your y data? Your code is full of useless stuff and "magic" numbers.
Add this at the end of your code:
axis([0 30 69 70])
You'll see the Gaussian shape you look for

Community Treasure Hunt

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

Start Hunting!