cómo generar una función aleatoria convexa de piezas lineales
Quiero generar un ejemplo de juguete para ilustrar una función lineal a trozos convexa en python
, pero no pude encontrar la mejor manera de hacerlo. Lo que quiero hacer es indicar el número de líneas y generar la función aleatoriamente.
Una función lineal a trozos convexa se define como:
Por ejemplo, si quiero tener cuatro líneas lineales, entonces quiero generar algo como se muestra a continuación.
Dado que hay cuatro líneas, necesito generar cuatro números enteros aleatorios crecientes para determinar los intervalos en el eje x.
import random
import numpy as np
random.seed(1)
x_points = np.array(random.sample(range(1, 20), 4))
x_points.sort()
x_points = np.append(0, x_points)
x_points
[0 3 4 5 9]
Ahora puedo usar los dos primeros puntos y crear una función lineal aleatoria, pero no sé cómo debo continuar desde allí para preservar la convexidad. Tenga en cuenta que una función se llama convexa si el segmento de línea entre dos puntos en el gráfico de la función no se encuentra por debajo del gráfico entre los dos puntos.
davy.ai
Una forma de generar un ejemplo ficticio de una función convexa linealmente por partes en Python es usando las bibliotecas
random
ynumpy
. Aquí hay un ejemplo de código que genera una función convexa linealmente por partes aleatoria con un número especificado de líneas:En este ejemplo, usamos la función
random.sample
para generar aleatoriamente un conjunto de valores enteros distintos entre 1 y 20 (inclusive) para usar como coordenadas x de los segmentos lineales. También usamos la funciónrandom.uniform
para generar un conjunto de valores aleatorios entre 0 y 100 (inclusive) para usar como coordenadas y de los segmentos lineales. Aseguramos que el primer y último valor y sean 0 y 100, respectivamente, para garantizar que la función sea convexa.Luego, usamos la función
piecewise
denumpy
para generar la función linealmente por partes para un rango de valores x de 0 a 20. Finalmente, trazamos la función usandomatplotlib
. El gráfico resultante debería mostrar una función convexa linealmente por partes con cuatro líneas, similar al ejemplo mostrado en el enunciado de la pregunta.