11 votos

Encontrar soluciones no negativas a un sistema lineal subdeterminado

Este es el entorno de mi problema: tengo un sistema lineal de 4 ecuaciones en 8 incógnitas (es decir $Ax = b$ , donde $A$ es $4 \times 8$ , $x$ es $8 \times 1$ y $b$ es $4 \times 1$ con $A$ dado y $b$ que varían con algunos parámetros exógenos, es decir, esencialmente dados). Así, tras reducir el sistema, el espacio de soluciones puede describirse mediante una función lineal $f \, : \, \mathbb{R}^4 \rightarrow \mathbb{R}^4$ que puedo encontrar explícitamente.

Debido a la naturaleza del problema, sólo me interesan los valores no negativos para cada una de las 8 incógnitas. Por lo tanto, puedo restringir la función $f$ al dominio $\mathbb{R}^4_{\geq 0}$ (es decir, examinar sólo los valores no negativos para cada una de las 4 variables libres). Lo que me interesa saber (y clasificar para diferentes valores de los parámetros, que cambiarán $b$ ) es si existen soluciones para las que las 8 incógnitas son no negativas -o, equivalentemente, si la función $f$ toma valores no negativos en el dominio no negativo $\mathbb{R}^4_{\geq 0}$ .

Si hay una manera de resolver esto analíticamente, sería genial; alternativamente, si hay una buena manera de hacer esto numéricamente (uso MATLAB), eso sería sólo un poco menos grande. Gracias de antemano.


Muchas gracias a todos por vuestras respuestas, ha sido de gran ayuda. Elaborar la solución a mano utilizando el documento de LL Dines puede resultar demasiado engorroso, ya que requiere conocer el signo de los coeficientes, y examinamos miles de conjuntos diferentes de coeficientes (ya que variamos varios parámetros); sin embargo, aunque sólo sea por eso, es muy agradable saber que hay es un algoritmo para determinar (analíticamente) la existencia de soluciones no negativas. Además, todos los consejos sobre el software que se han dado han sido muy útiles. He estudiado todas vuestras sugerencias y, por ahora, creo que intentaremos utilizar lsqnonneg. Gracias de nuevo por vuestra ayuda.

0 votos

Tenga en cuenta que si $A$ es 4x8 y x es 8x1, entonces el dominio de $f$ es $\mathbb{R}^8$ no $\mathbb{R}^4$

0 votos

Gracias por la respuesta. Ciertamente la función que describe el sistema lineal tiene dominio $\mathbb{R}^8$ pero la función que describe el espacio de la solución (es decir, la función $f$ que mapea cualquier elección del $4$ variables libres a la única tupla del $4$ variables principales que dan una solución al sistema) tienen dominio $\mathbb{R}^4$ ?

0 votos

Ah, ya veo lo que dices....después de haber elegido algunos valores fijos para las variables libres, entonces hay una función de las variables básicas restantes $f: \mathbb{R}^4 \to \mathbb{R}^4 $ . Gracias.

7voto

littleO Puntos 12894

Matlab tiene una función lsqnonneg que puede minimizar $\| Ax - b\|_2$ con la condición de que $x \geq 0$ .

El valor mínimo será $0$ si y sólo si existe una solución no negativa para $Ax = b$ .

0 votos

¿Por qué utilizar los mínimos cuadrados cuando el sistema lineal está subdeterminado? Las restricciones lineales de igualdad con restricciones de no negatividad son lo más parecido a un LP.

0 votos

@RodrigodeAzevedo También podrías formular el problema como un programa lineal, eso también funciona.

0 votos

También se podría formular como un programa cuadrático. Es lsqnonneg más eficiente que quadprog ?

5voto

user15381 Puntos 32

Se trata de un problema de optimización lineal estándar. En resumen, el conjunto de todas las soluciones no negativas puede describirse completamente mediante un sistema finito de desigualdades lineales o un "conjunto generador" finito, de modo que cada solución es una combinación lineal positiva de elementos del conjunto generador.

A $8\times 4$ es muy pequeña y razonable en este contexto, por lo que si tienes los coeficientes exactos de tu matriz podrás determinar exactamente el conjunto de soluciones no negativas.

http://en.wikipedia.org/wiki/Linear_programming#Solvers_and_scripting_.28programming.29_languages

0 votos

Muchas gracias. Después de leer el artículo enlazado, todavía estoy un poco inseguro en cuanto a cómo proceder. Dado que sólo tenemos un sistema de ecuaciones lineales (y no estamos tratando de optimizar), ¿podríamos hacer algo como "minimizar" la función $f(x_1,\ldots,x_8) = 0$ con las correspondientes restricciones de no negatividad? En este caso, ¿cómo nos aseguramos de que nuestro sistema de ecuaciones sigue siendo válido?

3voto

Beni Bogosel Puntos 15173

Un interesante artículo sobre la positividad de las soluciones de un sistema lineal puede encontrarse aquí: http://www.jstor.org/stable/1968384?seq=1 (si no recuerdo mal, si te registras, tienes derecho a leer 3 artículos gratis, así que no necesitas pagar para ver el artículo) Se presenta un algoritmo que se puede hacer a mano.

Una caja de herramientas de Matlab que puede resolver problemas de optimización con restricciones es Yalmip . Es gratuito, fácil de instalar (sólo hay que copiar la carpeta en la ruta de Matlab) y mirar un poco en el tutorial te mostrará que el manejo de las restricciones es realmente fácil. Usted no tiene que preocuparse de cómo se puede escribir en la forma de la matriz. El software lo hace por ti.

Tomando su ejemplo, usted tiene un $4 \times 8$ matriz $A$ que se da y un $8\times 1$ vector $b$ también se da. La incógnita es el vector $x$ con componentes positivos.

Un posible código Matlab (busque la sintaxis usted mismo en el sitio de documentación):

A = [...]; b = [...]; %variable x = sdpvar(8,1); %constraints F = [A*x == b, x(:)>=0]; %find a feasible x solvesdp(F); %display double(x)

1voto

Dillie-O Puntos 193

Eliminación de Fourier-Motzkin puede ser de ayuda. Puedes escribir tus ecuaciones como pares de inecuaciones opuestas [ $a'x = b$ se convierte en $a'x \ge b$ y $a'x \le b$ ].

El software de álgebra computacional puede ser más útil que MATLAB. Aquí está el Documentación de Mathematica . El libre Wolfram Alpha site también puede resolver sistemas de desigualdades.

1voto

Baller Geek Puntos 13

Tal vez no sea útil para el cartel original en este momento, pero como me encontré con esta pregunta, lo siguiente fue útil para mí. El conjunto $\{x \mid Ax = b, x \geq 0 \}$ es un poliedro (como se menciona en otra respuesta, también se puede representar mediante una combinación lineal de generadores, si es necesario). Hay bibliotecas que pueden manejar los poliedros de manera eficiente, por ejemplo PPL , Delantal . Algunas partes de PPL son accesibles desde Sage. Estas bibliotecas proporcionan una API para construir poliedros a partir de restricciones (o generadores), para comprobar el vacío, para proyectar (será útil para la pregunta del OP "para qué valores de $b$ el poliedro no es vacío") y así sucesivamente.

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