Una parábola es de la forma \(y=ax^2+bx+c\), luego nos plantea un sistema de la forma:

(%i4) x :[ 1, - 1, 3, - 2] $
y :[ 5 . 5, 15 . 5, 11 . 2, 26 . 4] $
A : transpose( matrix( x ^ 2, x ^ 1, x ^ 0)) $
print( A, matrix([ a],[ b],[ c]), "=", transpose( y)) $
[ 1 1 1 1 1 1 9 3 1 4 2 1 ] [ a b c ] = [ 5.5 15.5 11.2 26.4 ]

Veamos si tiene solución:

(%i5) if rank( addcol( A, transpose( y)))> rank( A) then print( "Sistema Incompatible") $
rat: replaced 5.5 by 11/2 = 5.5 rat: replaced 15.5 by 31/2 = 15.5 rat: replaced 11.2 by 56/5 = 11.2 rat: replaced 26.4 by 132/5 = 26.4 Sistema Incompatible

Si rank(A) es igual al número de incógnitas tendremos una aproximación por mínimos cuadrados:

(%i6) if rank( A) = matrix_size( A)[ 2] then print( "Existe solución por mínimos cuadrados") $
0 errores, 0 advertencias Existe solución por mínimos cuadrados

Esta solución vendrá dada por \(\bar{x}=(A^t.A)^{-1}.A^t.y\)

(%i8) xm : invert( transpose( A). A). transpose( A). transpose( y) $
xm : truncate( xm * 100) / 100, numer $ /* truncamos a dos decimales */

La parábola que buscamos es:

(%i9) xm. matrix([ z ^ 2],[ z],[ 1]) ; /* utilizamos la variable z para no confundir */
(%o9) 1.96 z 2 5.0 z + 8.53

Ahora la dibujamos con los puntos para ver la aproximación:

(%i10) wxplot2d([ %,[ discrete, makelist([ x[ i], y[ i]], i, 1, 4)]],[ z, - 2 . 5, 3 . 5],[ style, lines, points]) ;
(%t10)  (Gráficos)
(%o10)

Created with wxMaxima.