Regresión Polinomial.

La regresión polinomial es un tipo de regresión lineal que se utiliza cuando los datos se ajustan mejor a una curva que a una linea recta. Teniendo un polinomio:

 
  • Se identifica el grado de la función.
  • Buscamos las derivadas de cada uno de los coeficientes del polinomio. (utiliza ecuaciones de segundo grado).
  • Hacer una tabla de sumatorias.
  • Igualamos las derivadas a 0 para hacer un sistema de ecuaciones.

  • Resolvemos el sistema de ecuaciones con un Método numérico (en este caso,).
  • Hallar el error standard (Sr), coeficiente de determinación (r^2) y coeficiente de correlación (r) con: 

 , .



Regresión Lineal de Modelos No Lineales.

En experimentos de la vida real se pueden registrar datos que, al graficarlos, no tienen forma lineal, sino pueden tener forma de una curva.
de la presentación de la Maestra Yolanda Cham.

Pero es posible utilizar nuestro modelo de regresión lineal para estos casos, solo es necesario linealizar la curva. Para esto existen dos modelos, Modelo exponencial y modelo de potencias.

Modelo exponencial: 


funciona para funciones de la forma: 

Para linealizar estas ecuaciones se puede sacar logaritmo natural de cada lado de la ecuación. 


Al final obtenemos . Esta  ecuación tiene forma lineal, y se puede hacer la regresión, donde ahora  es la ordenada al origen,  es la pendiente y el eje de  se vuelve el eje de . Así pasamos de la función roja a la azul de la siguiente figura: 


Modelo de potencias:

Para funciones de la forma: 

Para linealizar esta función se utiliza logaritmo base 10 de ambos lados de la ecuación:


Al final obtenemos . Esta  ecuación tiene forma lineal, y se puede hacer la regresión, donde ahora  es la ordenada al origen,  es la pendiente, el eje de  se vuelve el eje de  y el eje de  se vuelve el eje de . Así pasamos de la función roja a la azul de la siguiente figura: 







Eliminación de Gauss y Gauss Jordan

Eliminación de Gauss.

Este es un método para resolver sistemas de ecuaciones. Proviene del algebra lineal y consiste en representar el sistema en una matriz y, con operaciones elementales de fila y columna, hacer a la matriz una matriz triangular superior. Después, por medio de la la substitución hacia atrás, se obtiene el resultado del sistema.
No es un método iterativo, puesto que solo reduce el la matriz renglón por renglón. No se necesita comparar para saver si se continua reduciendo la matriz, ya que las operaciones garantizan que la matriz quedará reducida a una matriz triangular superior. 

Código: 

Ejemplos de Éxito:


Ejemplos de falla: 




####################################################################################################################################################

Eliminación de Gauss-Jordan.

Este es un método para resolver sistemas de ecuaciones. Proviene del algebra lineal y consiste en representar el sistema en una matriz y, con operaciones elementales de fila y columna, hacer a la matriz a su forma reducida escalonada por renglones (aumenta por los resultados del sistema, que también cambiaron al hacer las operaciones elementales de fila y columna). De tal manera, si el sistema tuviera solución única, se sabría el valor exacto de cada una de las incógnitas relacionando la incógnita a la que representa el pivote y el resultado en la columna de los resultados y en la fila de ese pivote.



No es un método iterativo, puesto que solo reduce el la matriz renglón por renglón. No se necesita comparar para saver si se continua reduciendo la matriz, ya que las operaciones garantizan que la matriz quedará reducida a una matriz reducida escalonada por renglones.

Código:


Después de descubrir que este código causaba un error en la columna 3 de varias matrices decidí cambiarlo para utilizar simplemente la función rref de Scilab.





Ejemplos de Éxito:







Casos de falla:

Al utilizar la función rref parece que no encuentra el código no presenta errores aparentes.




En estos casos el sistema realmente no puede tener solución, puesto que no hay solución única, pero la función rref despliega la matriz escalonada reducida por renglones.

####################################################################################################################################################

Conclusión:

El utilizar matrices para resolver los sistemas de ecuaciones resulta bastante conveniente, en especial si se utiliza una computadora para resolverlos con gran rapidez. En mi opinion, la eliminación Gauss-Jordan es mejor puesto a que se realizan muchos menos pasos al no tener que hacer la sustitución hacia atrás. Los casos de falla son solo aquellos en los que no existe solución única (que puede tener infinitas o ninguna), por lo cual estos dos métodos son exactos y precisos. 




Comparativa


Método Tipo
Bisección  Cerrado
Newtwon-Raphson Abierto 
Secante  Abierto
Bairstow Abierto

Requisitos para buen funcionamiento: 

Bisección:

Introducir dos valores semilla, en los que la función tiene que tener un cambio de signo y la raíz se encuentre en algún punto entre esos dos valores. 

Newton-Raphson:

Conocer la derivada de la función, la función no se indetermine, es decir, que no se haga una división entre cero u otra operación matemáticamente imposible.

Secante:

Unicamente se necesita conocer la función y se deven tener dos valores semilla, estos no tienen que encerrar a la raíz. Pero la secante de estos valores no tiene que tender a infinito, es decir, que no tenga pendiente de cero. 

Bairstow:

Se insertan dos valores iniciales, y se encuentran las raíces. 

####################################################################################################################################################

Riesgos: 

Bisección:

Si en los valores semilla no hay un cambio de signo, el método no encuentra la raíz y existen un número muy extenso de casos para los cuales este método no encuentra la raíz.

Newton-Raphson:

La función tiene riesgo a indeterminarse, es decir, se hace una división entre cero u otra operación matemáticamente imposible. También la linea tangente de la función en cierto punto puede tener una pendiente de cero, o cercana a cero, por lo que nunca cruza con el eje de las X por lo que no encuentra la raíz. 

Secante:

La linea secante entre los valores puede tender a infinito y nunca cruzar con el eje X, por lo tanto no encuentra la raíz.

Bairstow:

Este método no presenta riesgos, dado que como calcula las raíces de un polinomio, no hay reglas de la geometría que le impidan encontrar la raíces. 


Método Convergencia
Bisección  Converge a la raíz de la función 
Newtwon-Raphson Orden de convergencia cuadrático o mayor 
Secante  es el número áureo
Bairstow  orden de convergencia cuadrático

Método Ventajas Desventajas
Bisección  Converge a la raíz de la función  Es muy poco eficiente
Es cerrado
Newtwon-Raphson Es por lo general muy eficiente Se necesita conocer la derivada de la función 
El orden en el que se insertan los valores afecta al método
Puede no encontrar la raíz
Secante  Es por lo general muy eficiente Puede no encontrar la raíz
Es muy rápido
No es necesario conocer la derivada de la función
Bairstow No tiene riesgos
Encuentra todas las raíces
(Hasta ahora) Es el único método que encuentra raíces imaginarias


Método Tipo de raíces que encuentra el método
Bisección  Las raíces de una función (los ceros de la función)
Newtwon-Raphson Las raíces de una función (los ceros de la función)
Secante  Las raíces de una función (los ceros de la función)
Bairstow Las raíces de un polinomio

Método Numero de raíces que encuentra el método
Bisección  1
Newtwon-Raphson 1
Secante  1
Bairstow Todas



Método de la secante

El método de la secante es un método para encontrar los ceros de una función de forma iterativa.

Este método encuentra los ceros de la función de una forma similar al método de Newton-Raphson, pero no calcula la derivada, sino que calcula una aproximación, esto es para que se pueda hacer de manera programable, así los usuarios no necesitan introducir la derivada de la función. 

El aproximado de una derivada lo consigue de forma iterativa con la siguiente formula:


Para que el método funcione se necesita conocer la función, y dos puntos (xi, xi-1) que son las aproximaciones iniciales. El método funciona dibujando una linea secante entre las aproximaciones iniciales, consigue la raíz de esa linea y lo utiliza para hacer una nueva aproximación, y vuelve a iterar utilizando esta aproximación nueva. 

Diagrama de flujo: 

La condición de parada del método es cuando la raíz calculada es menor al error definidos, este error tiene que ser un número muy cercano a 0 (que es lo que se está buscando en este método), en el caso de mi código se utiliza un error de 0.000000001

Código fuente: 


Pruebas: 

Con la función Log(x):
En este caso no se puede calcular Log(0), por lo tanto el código no funciona.
En este caso mi código no funciona porque no está preparado para recibir la raíz como valor semilla, además de que para logaritmo natural no se pueden utilizar valores negativos.

Con la función x^2:
La raíz exacta es 0, pero este valor se aproxima lo suficiente y concuerda con mi error.
Aunque mi programa no está preparado para recibir la raíz como valor semilla, como son valores relativamente cercanos uno del otro, no hizo falta dibujar muchas lineas secantes, y en una de ellas se cruzó con el valor de la raíz exacta que es 0.

Con la función x^3 + 1:
Este es un caso frontera, con estos valores mi código no puede encontrar la matriz. Esto puede ser debido a la manera en que se manejan los números decimales en C++, ya que matemáticamente todos las operaciones necesarias deberían de ser posibles. Al hacer un debug de este caso pude observar que una de las aproximaciones de mi código tiende a infinito. 

En conclusión: 

Este método es una manera rápida para conseguir las raíces de una función, ademas de que tiene la ventaja de que no es necesario conocer la derivada de la función, y ni siquiera se tiene que calcular (lo cual sería muy costoso para la computadora).