Utilizamos la siguiente pseudo iteración de Newton, que da muy rápidamente una matriz ortogonal.
$V_{k+1}=0.5(V_k+V_k^{-T})$ .
En efecto, dejemos que $f:V\rightarrow V^TV-I_n$ y $Df_V:H\rightarrow H^TV+V^TH$ . La iteración estándar de Newton es $V_{k+1}=V_k-(Df_{V_k})^{-1}(f(V_k))$ pero $Df_{V_k}$ no es invertible; sin embargo $H=0.5(V_k-V_k^{-T})$ es una solución de $Df_{V_k}(H)=f(V_k)$ . Para esta solución $V_{k+1}=0.5(V_k+V_k^{-T})$ .
Un juicio se compone de lo siguiente $3$ pasos.
Paso 1. Elegimos un elemento de $[L,U]$ : $V_0=kL+(1-k)U$ donde $k$ tiene la forma $i/10,i=0,\cdots,10$ .
Paso 2. Utilizamos el algoritmo iterativo anterior con el punto inicial $V_0$ y con $10$ iteraciones.
Paso 3. Si el límite obtenido está en la casilla, nos detenemos. En caso contrario, continuamos con el siguiente valor de $k$ .
El tiempo de cálculo para $1000=10^3$ los juicios es $17"$ . Hay una media de $5$ fallos por $10000=10^4$ ensayos.
A continuación, una copia del procedimiento en Maple (el resultado está en $V$ ).
restart;
with(LinearAlgebra);
Digits := 20;
roll := rand(1 .. 3);
n := 3; id := IdentityMatrix(n):
ve := Vector(11);
vv := Vector([.5, .6, .4, .7, .3, .8, .2, .9, .1, 1, 0]);
t:=time():
for l from 1 to 10000 do
K:=RandomMatrix(n,n,shape=skewsymmetric):
U:=evalf((id-K).(id+K)^(-1)):
Z1:=Matrix(3,3,(i,j)->0.3*roll()):Z2:=Matrix(3,3,(i,j)->-0.1*roll()):
U1:=U+Z1:U2:=U+Z2:
test := [10, 10]; co := 0;
while test<>[0,0] and co<11 do
co:=co+1:k:=vv[co]:
V:=k* U1+(1-k)* U2:
for i to 10 do
V := .5*(V+1/Transpose(V)) end do;
test:=[0,0]:
R1:= U+Z1-V:R2:=U+Z2-V:
for i from 1 to 3 do
for j from 1 to 3 do
if R1[i,j]<0 then test:=test+[1,0]: fi:
if R2[i,j]>0 then test:=test+[0,1]: fi:
od:od:
ve[co]:=test:
if co=11 and test<>[0,0] then print(ve[7..11],U,Z1,Z2); fi:
od: od:
time()-t;
EDITAR. Caso 1. Hay algunas soluciones en la caja y queremos encontrar una aproximación de una de esas soluciones. Un especialista de Maple me aconsejó utilizar el comando NPSolve; desgraciadamente, NPSolve sólo funciona (en general) si se le da un punto inicial no muy alejado de una solución. Sin embargo, podemos hacer lo siguiente:
PASO 1. Como en mi procedimiento anterior, elegimos algún punto $V0=kL+(1−k)U$ donde k tiene la forma $i/10,i=0,⋯,10$ en el segmento $[L,U]$ y lo proyectamos en $V_1$ en $O(3)$ . En algunos casos, ninguno de los $11$ puntos $V_1$ está en la caja; sin embargo, algunos están muy cerca del borde de la caja.
PASO 2. Utilizamos NLPSolve (este soft acepta sólo las cajas cerradas) con $V_1$ como punto inicial; entonces el software utiliza el espacio vectorial tangente de $O(3)$ en $V_1$ y, con un método de gradiente, empuja este punto hacia el borde de la caja. En general obtenemos por este método un punto $V_2$ que está muy cerca del borde de la caja y ya está. Para 20000=2,10^4 ensayos (como en mi procedimiento anterior), no sufrí ningún fallo (en el $11$ puntos $V_1$ , ¡¡NLPSolve siempre funciona para muchos de ellos!!)
Por supuesto, no hay pruebas de que el método no tenga fallos. Incluso hay que poder encontrar un contraejemplo asegurándose de que sólo hay una solución (en el borde de la caja). Por supuesto, el OP no se arriesgó mucho al ofrecer una gran bonificación por una prueba rigurosa. Se le perdonará porque 500000 dólares es el precio de una bonita casa.
CASO 2. No hay soluciones en la caja y queremos demostrar este hecho. Excepto si se encuentra una condición de la forma $x[i,j]>1$ Creo que no podemos evitar una prueba formal. En estas condiciones, no veo más métodos que el de la base de Gröbner. En $\mathbb{C}$ En la actualidad, hay cajas negras que hacen el trabajo cuando el número de relaciones no es demasiado grande; por desgracia, se sabe que en general el problema es mucho más complicado en el caso real; en particular, es necesario utilizar métodos de gradiente. De todos modos, no sé cómo hacer el trabajo con Maple.
0 votos
Aunque la dimensión es pequeña, se trata de un problema de programación cuártica (no cuadrática) con restricciones. De todos modos, si se elige un $P_0$ al azar dentro del margen dado y $USV^T$ es su descomposición de valor singular, $P=UV^T$ sería una buena primera aproximación. Si se asume la existencia de la solución, se puede intentar un método de rechazo. He hecho un experimento rápido en Octave. Siempre que el margen $u-\ell$ no es demasiado grande (por ejemplo, inferior a 0,1), normalmente se puede obtener una solución tras unas pocas (<10) conjeturas.
0 votos
Sí, entiendo la dificultad. Sin embargo, no estoy seguro de cuál es la probabilidad de éxito, por lo que puedo estimar el número de iteraciones.
0 votos
@RodrigodeAzevedo Sí, así es cuadrática, pero si la conviertes en una función de una sola objeción, se convierte en $\|P^TP-I\|_F^2$ , que es cuártica.
0 votos
Mirando el sistema, entiendo que define un conjunto semialgebraico que es de baja dimensión. Así que hay algoritmos para comprobar la viabilidad para este caso. Me pregunto si pueden ser eficientes cuando el conjunto es compacto y la dimensión es pequeña.
1 votos
Otra aproximación numérica podría ser el descenso de gradiente en la variedad $\mathcal O=\{P:P^TP=I\}$ hacia el mínimo de $\operatorname{dist}_{\mathcal B}(P)$ , donde $\mathcal B=\{P:\ell_{ij}\le p_{ij}\le u_{ij}\}$ . Con los parámetros del experimento de Rodrigo, y una conjetura inicial tomada uniformemente de $\mathcal B$ , éste converge en no más de dos pasos de descenso en el 90% de las veces. Desgraciadamente, un 0,2% de las veces se queda atascado en un mínimo local.
0 votos
Esto no es una respuesta completa a tu pregunta, pero dudo que puedas avanzar mucho hasta que puedas aislar primero los parámetros verdaderamente independientes en tu matriz ortogonal P (de los cuales sólo hay 3 más 3 opciones adicionales de signo). Véase aquí para una forma (pero probablemente no la única) de hacerlo.