Estaba tratando de ejecutar casos de prueba para CG y necesito generar:
- matrices definidas positivas simétricas
- de tamaño> 10,000
- DENSIDAD COMPLETA
Usando solo índices de matriz y, si es necesario, 1 vector (como )
Con número de condición inferior a 1000.
Yo he tratado:
Generando matrices aleatorias usando
A=rand(N,N)
y luegoA'A
para convertirlo en Sym. PD. [Esto aumenta el número de condición]Usando el vector appraoch como se muestra, pero parece que no puedo obtener una función
(x,i,j)
que garantice Sym y PD.
Después de mucha experimentación, se me ocurrió:
a(it,jt) = (vec(it)+vec(jt))/((it-1)^2+(jt-1)^2);
Si
a(it,it) = x(it)
si
Pero esto es PD hasta aproximadamente 500x500.
- XLATMR . [Con todas las calificaciones y escalas, es muy difícil de entender. Especialmente porque no puedo entender el álgebra lineal subyacente]
¿Alguien puede darme una función en x (vector) e i, j (índices) que cumpla con los requisitos anteriores?
linear-algebra
Encuesta
fuente
fuente
a+N*eye(N,N)
asegurará de que funcionará para todos los valores más allá de 5000? ¿Puedes convertir tu comentario en una respuesta?Respuestas:
Para obtener una matriz definida positiva densa con el número de condición bajo costo, elija una matriz diagonal cuya diagonal consista en números de (que serán los valores propios), con y elegidos al menos una vez, y un vector . Luego aplique una transformación de similitud, a través de las transformaciones de Householder, para formar la matriz , donde .D [ 1 , c ] 1 c u A : = ( I - t u u T ) D ( I - t u u T ) t = 2 / u T uC re [ 1 , c ] 1 C tu A : = ( I- t u uT) D ( I- t u uT) t = 2 / uTtu
Para formar esta matriz con operaciones , calcule , , en operaciones y luego como . (Si elige como el vector todo en uno, el número de multiplicaciones necesarias es solo .v : = D u s : = t 2 u T v / 2 w : = t v - s u O ( n ) A A = D - u w T - w u T u O ( n )O ( n2) v : = D u s : = t2tuTv / 2 w : = t v - s u O ( n ) UNA A = D - u wT- w uT tu O ( n )
Tenga en cuenta que el comportamiento de CG depende mucho de la distribución de valores propios, que se puede confirmar fácilmente variando .re
(Agregar a una matriz simétrica arbitraria necesita más grande que el valor propio más grande. Esto es difícil de calcular; por lo tanto, habría que elegir , pero el número de condición generalmente será muy pequeño , no es un caso de prueba realista para CG).A α α = ‖ A ‖α UNA α α = ∥ A ∥
fuente
1,-1,2,-2...50,-50
.Intente agregar un gran número (en el orden de la norma de la matriz) a las entradas diagonales de su matriz. Esto es equivalente a agregar α a cada uno de sus valores propios y debería mejorar el número de condición al reducir la brecha entre los valores propios más grandes y más pequeños.α α
fuente
No estoy seguro de cómo lo haría con un solo vector, pero con dos vectores aleatorios y θ de tamaño N , puede producir una matriz semi-definida positiva a través de U = ∏ i R i ( θ i )X θ norte
donde R i ( ⋅ ) es una rotación en el plano de los ejes i y i + 1 mod N .
Si desea mejorar el número de condición, puede agregar un valor positivo fijo a y volver a escalar si es necesario.X
fuente
fuente