Tengo la siguiente situación: $$ f_1(x_1) + f_1(x_2) + f_1(x_3) + \cdots + f_1(x_n) = c_1\\ f_2(x_1) + f_2(x_2) + f_2(x_3) + \cdots + f_2(x_n) = c_2\\ \vdots\\ f_n(x_1) + f_n(x_2) + f_n(x_3) + \cdots + f_n(x_n) = c_n $$ Estas fórmulas se evalúan en un vector determinado $\vec{x}$ , produciendo un vector $\vec{c}$ de constantes. Ahora, dado este vector $\vec{c}$ Quiero reconstruir el original $\vec{x}$ . Qué $f_i$ ¿que debo elegir que me permita hacer esto?
Hay dos limitaciones: $f_i$ está acotado en $(0,1)$ y $\left[f_i(x_j)=0\right] \rightarrow \left[x_j \in \{0,1\}\right]$ (y $f_i(x_j)$ es $0$ en al menos un punto).
Sin embargo, hay algunas suposiciones simplificadoras. Cada $x_i \in [0,1]$ y $\left[x_i=x_j\right] \rightarrow \left[\left[i=j\right] \vee \left[f_k(x_i)=f_k(x_j)=0\right]\right]$ . Además, el orden de los componentes de $\vec{x}$ es irrelevante (es decir, reconstruir cualquier permutación de $\vec{x}$ está bien).
Una solución de forma cerrada es ideal, pero una solución numérica que escale con gracia con $n$ también es aceptable. Soluciones parciales para $n \geq 4$ se aceptará si no hay un planteamiento general.
He intentado varias cosas, pero mi mejor intento hasta ahora es el más bien básico: $$ f_i(x_j) := x_j^{i} $$ Así que tenemos: $$ f_1(x_j) := x_j^1\\ f_2(x_j) := x_j^2\\ \vdots\\ f_n(x_j) := x_j^n $$ Visto así, cada ecuación representa una $n$ -dimensional supercuadrado . Para $n=2$ existe una forma cerrada (intersección de la línea con el cuadrante del círculo). Para $n=3$ , utilicé iteración Newton multidimensional . Sin embargo, para $n=4$ el solucionador no converge (o al menos tiene problemas numéricos).
La pregunta de nuevo: ¿Cuál es una buena elección de $f_i$ de manera que pueda reconstruir $\vec{x}$ dado $\vec{c}$ ?
0 votos
Casi parece que quieres una transformada de Fourier de valor real. (Excepto por la parte de la permutación).
0 votos
¿Para qué sirven tus etiquetas <sup>? En mi ordenador, sólo tienen el efecto de hacer el texto tan pequeño que es casi ilegible.
0 votos
No entiendo si las restricciones y los supuestos "simplificadores" hacen que este problema sea trivial o imposible. Tu intento abre algunos interrogantes extraños sobre lo que puedes/no puedes hacer. Me explico. Puede lo siguiente: $f_j(x_i) = x_i \delta_{ij}$ , donde $\delta_{ij}$ es el delta de Kronecker, ser utilizado? ¿Es compatible con sus restricciones? Su respuesta responderá a mis preguntas (no escritas).
0 votos
@PseudoRandom Las funciones $f_j$ no son a su vez funciones de los valores que se les dan. Por tanto, una función delta (acotada) es aceptable, pero inútil.
0 votos
@imallett: Creo que no entiendo lo que quieres decir: ¿el índice no se considera parte de la entrada? El $f_j(x_i)$ He optado por utilizar ambos $x_i$ y los índices. El delta de Kronecker está estrictamente acotado (de hecho, es 1 o 0, $\delta_{ij}=1 \iff i=j$ 0 en caso contrario) y cuando $i=j$ la salida de $f_j$ es $x_i$ , de lo contrario es 0. Por ejemplo, $f_1(x_1) = x_1$ pero cualquier otro índice $k \neq 1$ hace $f_1(x_k) =0$ . Con este truco, se obtienen los valores numéricos directamente en el vector $\vec{c}$ . Todo se basa en los índices, por eso no sé si es aceptable.
0 votos
@PseudoRandom el problema es que al hacer las funciones $f_j$ dependen de las entradas $x_i$ (desplazando la función delta para alinearla con $x_i$ ) es que esto hace que $f_j$ una función de sus propios argumentos. Lo que realmente estás sugiriendo es (tomar prestado el operador ternario) $f_{j,x_i}(a):=(a==x_i)?1:0$ . Obsérvese el subíndice en $f$ . Esto sólo funciona si supiera el $x_i$ s de antemano (yo no lo hago).
0 votos
@imallett: Entonces, ¿cómo puedes hacer $f_j(x_i) = x_i^j$ si $x$ , $j$ y $i$ son desconocidos? Toda función es una función de sus propios argumentos, no entiendo lo que quieres decir realmente. El operador ternario no puede usarse así: tal como lo escribiste, la salida es 1 o 0 (un valor booleano), lo cual no es mi caso, y no hay una $a$ implicados. La salida de la función que propuse es $x_i$ (con el índice apropiado $i$ ) o $0$ . No hay ningún parámetro oculto. Consulta la Wikipedia ( es.wikipedia.org/wiki/Kronecker_delta ) si es la primera vez que ve $\delta_{ij}$ .
0 votos
@PseudoRandom: Ah, creo que estaba pensando en el delta de Dirac. En cualquier caso, vamos a intentarlo de nuevo: no podemos definir $f_j(x_i)=x_i\cdot\delta(i,j)$ porque no tenemos $i$ . En realidad tenemos $f_j(a)=a\cdot\delta(???,j)$ ya que no tenemos ni idea de lo que el $x_i$ s son o en qué orden los obtenemos. Podríamos definir algunos $f_j(a,i)$ y arreglar el problema, pero desgraciadamente, $f_j$ debe sólo sea una función de $a$ (que de nuevo es algo $x_i$ de algún índice desconocido $i$ ).
0 votos
@imallett: Ok, nos estamos acercando. Ahora responde a la pregunta de mi comentario anterior: ¿cómo puedes (como hacen tanto la respuesta actual como tu ejemplo) hacer $f_j(x_i) = x_i^j$ si el índice $i$ ¿se desconoce? Respuesta: no puedes, porque has asumido correctamente (como yo) que el índice es parte de la entrada. Implícitamente, siempre tenemos $f_j(a,i,j)$ ( $j$ no es un problema, ya que podemos elegirlo como queramos). Pero, para que mi respuesta funcione, en realidad no se necesita $i$ . Las permutaciones son irrelevantes, por lo que se pueden reetiquetar los índices (reindexación $\vec{x}$ ) para obtener una permutación de $\vec{x}$ en $\vec{c}$ .
0 votos
Permítanme dar un ejemplo. Usted recibe $x_3$ primero, pero que $3$ es desconocido. Lo reetiquetas $\tilde{x}_1$ y dejar que la función haga su trabajo para obtener $c_1 = \tilde{x}_1 = x_3$ . A continuación, recibirá $x_1$ con $1$ desconocido, volver a etiquetar $\tilde{x}_2$ y dejar que la función trabaje para obtener $c_2 = \tilde{x}_2 = x_1$ . Y así sucesivamente. Si, por casualidad, la reindexación fuera perfecta ( $\tilde{x}_i = x_i$ por cada $i$ ), se obtiene $\vec{c}=\vec{x}$ . Si no es así, $\vec{c}$ contiene una permutación (algo aleatoria) de $\vec{x}$ . Pero los valores numéricos son correctos.
0 votos
@PseudoRandom: $f_j(x_i)=x_i^j$ está bien porque esa función no depende de $i$ . La función $f_j(x_i)=x_i^i$ sería no estar bien. Dicho de otro modo, el índice de la función es parte de la entrada. El índice del argumento no lo es. Además, la renumeración no es factible, ya que entonces la función necesita llevar un registro implícito de las veces que ha sido llamada.
0 votos
@imallett: Vale, no sabía que no se podía llevar la cuenta de las veces que se llama a una función. Pero no importa, en este punto, ya que mi argumento se basaba esencialmente en algún tipo (aunque muy débil) de conocimiento de los índices.