How do I get the minima of a parabola?
7 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I have a function that starts with 2 matrices (7x1 in this case)
tol=input('enter tolerance matrix: ');
pix=input('enter pixel matrix: ');
plot(tol,pix);
syms x
a=polyfit(tol,pix,3);
b=poly2sym(a);
c=ezplot(diff(b,x),[0 100]);
"c" generates a parabola. I need to find the exact minima. Mainly the x value of the minima. How do i get it.
Thanks for the help
0 Commenti
Risposta accettata
Star Strider
il 17 Apr 2014
I don’t see why you need to use the Symbolic Math Toolbox for this. I suggest:
% Create data:
tol = linspace(1,10,7);
pix = polyval(poly([1 3 5]),tol) + 0.5.*(rand(1,7)-.5);
% Fit:
a = polyfit(tol,pix,3);
d1a = polyder(a); % First derivative
d2a = polyder(d1a); % Second derivative
ip = roots(d1a); % Inflection points
mm = polyval(d2a,ip); % Second derivative evealuated at inflection points
fprintf(1,'\n\tMinimum at %.3f\n', ip(mm>0))
fprintf(1,'\n\tMaximum at %.3f\n', ip(mm<0))
figure(1)
plot(tol, pix, '-b')
hold on
plot(ip, polyval(a,ip), '+r')
hold off
grid
If you get complex roots, this becomes more interesting to plot but the maths are the same.
5 Commenti
Star Strider
il 17 Apr 2014
John — Noted. In his code, jchris14 mentions fitting a 3-degree polynomial with polyfit. Reading between the lines...
Più risposte (1)
Jos (10584)
il 17 Apr 2014
Why not solve this analytically?
P = polyfit(x,y,2) % fit parabola
% vertex is a minimum when P(1) > 0, a maximum when P(1) < 0
% (no vertex for a straight line when P(1)=0 !)
h = -P(2) / (2*P(1)) % x value of the minima (maxima)
k = P(3)-((P(2)^2) / (4*P(1))) % y value of the minima (maxima)
% polyval(P,h) will give the same value!
%(h,k) is the vertex point
% y = (p(1)*(x-h)^2) + k % vertex notation
2 Commenti
Star Strider
il 17 Apr 2014
In his code, jchris14 is using polyfit to fit a 3-degree polynomial, not actually a parabola. Otherwise I agree. He also wants to do this using MATLAB functions, and I’m not going to discourage that.
Vedere anche
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!