## Thursday, February 10, 2011

### A plot of the quadratic in Python

I have another simple matplotlib example, based on the parabola post from the other day (here). The conclusion from that post was that any function:

 `y(x) = ax2 + bx + c`

can be manipulated to the form:

 `y - y0 = a(x - x0)2`

That is, the parabola is just `y = a(x)2` translated to have a different vertex. I didn't do a systematic examination or anything, but here is one example in Python.

The function `quadratic` takes arguments `a, b, and c` and returns the vertex `(x0, y0)` as well as a numpy array containing `x` such that `|x - x0| <= 4`, and a second one containing `f(x)` for each value of `x`.

We plot two sets of three parabolas, each set has one for each of `a = 1, 2 and 3`. One set is at the origin (cyan, blue and purple). The second set (magenta, salmon and red) has `c = 3` and:

 `a = 1; b = 2a = 2; b = 4a = 3; b = 6`

Since `x0 = -b/2a` is the same for each parabola in the second set, they all have the same axis of symmetry. The only difference (besides the shape parameter `a`) is `y0`, which can be calculated either from plugging `a, b, c and x0` into the standard form, or by using the fact that

 `y0 = b2/4a - b2/2a + c = -b2/4a + c`

Using the second method, I get:

 `a = 1; b = 2; y0 = -1 + 3 = 2a = 2; b = 4; y0 = -2 + 3 = 1a = 3; b = 6; y0 = -3 + 3 = 0`

We ought to be able to solve for b and c to put the parabola anywhere on the x,y-plane..

UPDATE:

 `x0 = -b/2ab = -2ax0y0 = -b2/4a + cc = y0 + b2/4a = y0 + ax02check:y = ax2 + bx + c = ax2 -2ax0x + y0 + ax02y - y0 = a(x2 -2x0x + x02) = a(x - x0)2 `

 `from __future__ import divisionimport matplotlib.pyplot as pltimport numpy as npdef func(a,b,c): @np.vectorize def f(x): return a*x**2 + b*x + c return fdef quadratic(a,b=0,c=0): f = func(a,b,c) x0 = -b/(2*a) X = np.arange(x0-4,x0+4,0.01) return x0,f(x0),X,f(X) blues = ['cyan', 'blue', 'purple']reds = ['magenta', 'salmon', 'red'] for i,(a,b) in enumerate(zip((1,2,3),(2,4,6))): x0,y0,X,Y = quadratic(a,b,c=3) c = reds[i] plt.scatter(X,Y,s=2,color=c) plt.scatter(x0,y0,s=100,color=c) print 'x0',x0,'y0',y0 x0,y0,X,Y = quadratic(a) c = blues[i] plt.scatter(X,Y,s=2,color=c) plt.scatter(x0,y0,s=100,color='k')ax = plt.axes()ax.set_xlim(-3,3)ax.set_ylim(-1,5)plt.grid(True)plt.savefig('example.png')`