1 votos

Factorización de un polinomio lineal multivariante

Soy un programador informático que intenta resolver un problema particular de juguete, ¡y mis conocimientos de álgebra lineal son demasiado escasos para resolverlo!

Tengo un conjunto de datos que puede ser modelado utilizando esta función:

f1(w,x,y,z)=(Aw+Bx+C)(Dy+Ez+F)

(Para algunas constantes A , B , C , D , E y F .)

He ampliado la función de la siguiente manera:

f2(w,x,y,z)=ADwy+AEwz+AFw+BDxy+BExz+BFx+CDy+CEz+CF

Y luego reescribir esta función como el equivalente:

f3(a,b,c,d,e,f,g,h)=ADa+AEb+AFc+BDd+BEe+BFf+CDg+CEh+CF

(Esto es con a=wy , b=wz etc.)

Y luego, ya que es una función lineal, encontró un mejor ajuste para las constantes AD , AE , AF , BD , BE , BF , CD , CE y CF mediante una regresión lineal por mínimos cuadrados. (Para ello, simplemente convertí mis columnas de datos de entrada según fuera necesario para convertir de f1 a f3 . En caso de que sea relevante, utilicé la herramienta de Python numpy.linalg.lstsq para hacerlo, y el ajuste está bien dentro de los niveles de tolerancia que me interesan).

Dado esto, ¿es posible volver a factorizar el resultado para encontrar las constantes A , B , C , D , E y F ? Si es así, ¿cómo lo hago? Si no, ¿por qué?

Gracias.

EDIT: se ha proporcionado una explicación adicional para mostrar cómo He convertido el problema en uno lineal. Como he dicho, el primer paso del problema ya funciona; ¡intento pasar al segundo paso!

0voto

Cem Kalyoncu Puntos 4740

El factoring que quieres no existe sobre $\mathbb{R}$ en general. Claro $xy+x+y+1=(x+1)(y+1)$ pero trata de tener en cuenta $xy+2x+y+1$ . A menos que tu regresión lineal se ajuste perfectamente a los datos (error cero), los coeficientes que obtengas de la regresión lineal probablemente no serán un factor de dos polinomios. Por eso, probablemente sea mejor una regresión directa sobre la forma de la función que quieres (aunque sea no lineal en los parámetros).

Existen algunas nociones de factorización polinómica aproximada en presencia de "ruido numérico", por ejemplo, véase http://www.sciencedirect.com/science/article/pii/S0747717107001538 pero no sé mucho sobre ese tema y parece que estarías resolviendo un problema más difícil de lo necesario aquí.

0voto

ironwallaby Puntos 9

Muchas gracias a todos (y en particular, Respawned Fluff ) por las pistas. Voy a responder a mi propia pregunta en su totalidad para la posteridad.

Parece que lo que estoy haciendo es muy similar a un regresión polinómica . La técnica viola algunos de los supuestos de una regresión lineal (sobre todo la independencia de las variables explicativas), pero no obstante funciona en muchas situaciones. (Aunque hay que verificar los resultados, para estar seguros, ya que la alta correlación entre las variables podría llevar a la degeneración. En mi caso, lo hice graficando los resultados e inspeccionándolos visualmente para estar cuerdo). El inconveniente, por desgracia, es que es difícil interpretar las constantes resultantes y la ecuación resultante de mejor ajuste podría considerarse mejor una "caja negra".

Más al punto de mi pregunta, no es posible en general factorizar mi polinomio, ya que depende de los valores exactos de las constantes obtenidas. Evidentemente, es posible utilizar descomposición del valor singular (en NumPy, numpy.linalg.svd ) a "aproximadamente factor" el polinomio, pero al hacerlo lo más probable es que el ajuste sea peor.

El enfoque preferido para esto es, si quiero ajustar una ecuación de una manera particular, simplemente usar un método de regresión no lineal. (NumPy no incluye las herramientas para esto, pero SciPy hace .) (Mi intuición sugiere que los métodos no lineales dan más trabajo que el método lineal que he utilizado -ya que hay que hacer conjeturas iniciales-, pero pueden proporcionar un marco mucho más fácil con el que entender intuitivamente los datos, ya que el resultado tendrá la forma que uno quiera).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X