Un resumen de las funciones de reemplazo de uso común en la caja de herramientas MATLAB cvx para resolver el problema de los errores de expresión

Sugerencia: después de escribir el artículo, la tabla de contenido se puede generar automáticamente. Cómo generarla puede consultar el documento de ayuda a la derecha


prefacio

Este artículo resume algunas funciones de reemplazo comunes en cvx, porque habrá muchos errores de expresión en el proceso de programación de cvx, y las declaraciones que generalmente no tienen problemas en la programación causarán varios errores en cvx. Algunas funciones especiales propietarias, que usan estas funciones para reemplazar expresiones, resolverán muchos errores de programación de cvx.

Si es un principiante de cvx y quiere dominar la sintaxis general de cvx y los métodos de programación, puede leer este artículo:
Conocimiento básico de la caja de herramientas de CVX en MATLAB para resolver problemas de optimización convexa: sintaxis, declaración de variables, función objetivo, restricciones, errores de programación de cvx y solución

Si encuentra muchos errores inesperados en la programación, puede leer este artículo si se producen errores de cvx:
Resumen de errores de cvx de MATLAB, resolución de errores de cvx, resumen de puntos de conocimiento de cvx, habilidades de programación de cvx


1. Funciones básicas

función significado
abdominales(x) Función de valor absoluto, devuelve el valor absoluto de la entrada x
cuadrado(x) Función cuadrada, devuelve el cuadrado de la entrada x, es decir, x^2
norma(x,p) Función norma, devuelve la norma p de x, p puede ser 'inf' (norma infinita)
máx(x,y) Devuelve el mayor de x e y
min(x,y) Devuelve el menor de x e y
exp(x) Función exponencial, devuelve el valor de e elevado a la xésima potencia
registro (x) Función de logaritmo natural, devuelve el valor del logaritmo natural de x (base e)
suma(x) Función suma, devuelve la suma de todos los elementos en el vector x
producción(x) Función de producto, devuelve el producto de todos los elementos en el vector x

2. Funciones avanzadas

Las funciones resumidas en esta sección son algunas funciones poco comunes, pero útiles, y fáciles de pasar por alto. Muchos problemas se pueden resolver con estas funciones.

1.inv_pos()—el recíproco de un número positivo

inv_pos(x) es una función atómica utilizada para encontrar el recíproco de un número positivo x, es decir, 1/x. Sin embargo, al definir esta función, debe agregar un prefijo "inv_pos" para indicar que el parámetro x debe ser un número positivo, de lo contrario, se generarán resultados indefinidos.

En problemas de optimización, a menudo es necesario resolver la inversa de una matriz o vector. Sin embargo, las operaciones inversas no se pueden realizar cuando se trata de matrices singulares o definidas no positivas. Por lo tanto, para asegurarse de que la matriz o el vector sea definido positivo, puede usar la función inv_pos en CVX, que determinará automáticamente la definición positiva de la variable y resolverá su inversa. La función inv_pos devuelve inf (infinito) o NaN (no un número) cuando la variable no es definida positiva.

El código es el siguiente (ejemplo):
Se requiere resolver una variable x de manera que 1/x sea la menor, y x debe ser mayor o igual a 0.5.

cvx_begin
    variable x
    minimize(inv_pos(x) - 1)
    subject to
        x >= 0.5;
cvx_end

2.norm_inv_pos(x, p)—función norma inversa

norm_inv_pos(x, p) es una función atómica que calcula el inverso de la p-norma de una variable x, donde p puede ser cualquier número real pero debe ser mayor que cero. La función devuelve un número positivo.

Esta función se usa a menudo para resolver el problema de programación de la norma Lp, donde el inverso de la norma Lp se usa como un término de penalización para avanzar la solución a una dispersión más alta.

El código es el siguiente (ejemplo):

cvx_begin
    variable x(n);
    minimize( norm(x, p) );
    subject to
        norm_inv_pos(x, q) <= t;
cvx_end

donde x es un vector columna, p y q son números positivos y t es otro número positivo. El problema de optimización minimiza la norma Lp de una variable x mientras satisface que el recíproco de la norma Lq de x es menor o igual que t. Esta restricción limita hasta dónde se puede empujar x en la dirección dispersa.


3.pow_p(x, p)—función de potencia

pow_p(x, p) es una función atómica utilizada para calcular la potencia p de la variable x. Donde p puede ser cualquier número real, pero debe ser mayor o igual a 1. Esta función devuelve un número.

Esta función se usa a menudo en problemas de optimización. Cuando la función objetivo o las restricciones contienen funciones de potencia sobre las variables, la función pow_p se puede usar para simplificar la expresión.

El código es el siguiente (ejemplo):
Calcule la estimación óptima de la señal de acuerdo con el modelo de energía dispersa:

cvx_begin
    variable x(n);
    minimize( norm(y - A*x) + lambda*pow_p(norm(x,1),q) );
cvx_end

Entre ellos, y es un vector de observación, A es una matriz de observación, x es el vector de señal a obtener, n es la longitud del vector de señal y lambda y q son hiperparámetros. El problema de optimización utiliza la norma L1 como término de regularización para capturar la escasez. En este ejemplo, la función pow_p se usa para calcular la potencia q-ésima de la norma L1 de x.

4.rel_entr(x, y)—parte de la divergencia KL

rel_entr(x, y) es una función atómica que representa una fracción de la divergencia KL, x log(x/y). Entre ellos, x e y tienen el mismo tamaño y forma, y ​​se realizan cálculos elemento por elemento. Se utiliza principalmente en algunos problemas de optimización que necesitan satisfacer condiciones de probabilidad o distribución.

El primer parámetro x de la función rel_entr puede ser cualquier número real no negativo o vector (o matriz) de números reales, y el segundo parámetro y también es un número real no negativo o vector (o matriz) de números reales, y no puede ser un elemento de 0 en y. El valor de rel_entr(x, y) es 0 cuando x e y son iguales. En los problemas de CVX, rel_entr(x, y) se usa generalmente para resolver algunos problemas especiales, como problemas de máxima entropía, problemas de teoría de la información y regresión de probabilidad logarítmica.

El código es el siguiente (ejemplo):
la divergencia KL se calcula utilizando la función rel_entr

cvx_begin
    variable x(n);
    maximize(sum(rel_entr(x, p)));
    subject to
        sum(x) == 1;
        x >= 0;
cvx_end

Entre ellos, x es un vector de columna n-dimensional, p también es un vector de columna del mismo tamaño y forma, y ​​CVX convertirá automáticamente las operaciones entre todos los elementos en la fórmula de divergencia KL correspondiente.

5. entr(x)—función de entropía

entr(x) es una función atómica que calcula la entropía de una variable aleatoria con probabilidad x. Esta función devuelve un número.

La entropía es un índice utilizado para medir la incertidumbre de las variables aleatorias, que representa la cantidad promedio de información en cada posibilidad en un conjunto de posibilidades. En el aprendizaje automático, la entropía se usa ampliamente, especialmente en modelos como la ganancia de información y los árboles de decisión.

El código es el siguiente (ejemplo):
El problema en este ejemplo es generar una imagen de mayor resolución a partir de una imagen inicial de baja resolución:

cvx_begin
    variable x(n);
    minimize( norm(y - H*x) );
    subject to
        entr(x) <= epsilon;
cvx_end

donde x es la imagen de alta resolución que se busca, y es la observación de baja resolución, H es una matriz de reducción de resolución, n es la longitud de x y épsilon es un umbral dado. En este ejemplo, la restricción requiere que la entropía de la imagen de alta resolución sea menor o igual a un umbral dado, lo que evita soluciones demasiado suaves.

6.quad_form(x, A)—forma cuadrática

quad_form(x, A) es una función atómica que calcula el valor de la forma cuadrática x'Ax, donde x es un vector columna y A es una matriz simétrica. Esta función devuelve un número.

Esta función se usa a menudo en problemas de optimización.Cuando la función objetivo o las restricciones contienen formas cuadráticas sobre vectores, la función quad_form se puede usar para simplificar la expresión.

El código es el siguiente (ejemplo):
El siguiente es un ejemplo del uso de la función quad_form El problema en este ejemplo es resolver un problema de programación cuadrática:

cvx_begin
    variable x(n);
    minimize( x'*Q*x + c'*x );
    subject to
        A*x <= b;
cvx_end

Entre ellos, Q es una matriz simétrica, c es un vector columna, A es una matriz y b es un vector columna. La función objetivo es una función cuadrática con un término cuadrático, y minimizar la función objetivo es equivalente a resolver un problema de programación cuadrática. En este ejemplo, la función quad_form se usa para calcular el valor del término cuadrático x'Qx.

Resumir

El contenido anterior es un resumen de algunas subfunciones en cvx. Estas funciones no solo pueden simplificar bien nuestras expresiones, sino que también resuelven muchos errores encontrados en la programación. Dominar el uso de estas funciones lo ayudará a resolver problemas de optimización y dominar la caja de herramientas de cvx ayuda mucho.

Si no está muy familiarizado con MATLAB. Puede leer los siguientes dos artículos primero para consolidar el conocimiento básico.
Operaciones básicas de MATLAB, multiplicación de matrices, indexación de matrices de matrices, operadores máximos y mínimos, generación de matriz cero/matriz aleatoria/matriz de identidad, función de registro, significado de Inf y NaN, si la declaración es demasiado larga, use conectores para envolver líneas, lógica operadores y diferencias

El dibujo de MATLAB debe verse, ¡dibujar Daquan! Enciclopedia de operaciones básicas de dibujo de MATLAB: gráfico de líneas, gráfico de dispersión, estilo de color, resumen de grosor de línea

Supongo que te gusta

Origin blog.csdn.net/qq_45296693/article/details/130862818
Recomendado
Clasificación