Generando matrices simétricas positivas definidas usando índices

8

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 )A(i,j)=x(i)x(j)(i+j)

  • Con número de condición inferior a 1000.

Yo he tratado:

  1. Generando matrices aleatorias usando A=rand(N,N)y luego A'Apara convertirlo en Sym. PD. [Esto aumenta el número de condición]

  2. 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);Siitjt

a(it,it) = x(it)si it=jt

Pero esto es PD hasta aproximadamente 500x500.

  1. 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?

Encuesta
fuente
1
Intente agregar un gran número (en el orden del número de condición) 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. ααα
Aron Ahmadia
@AronAhmadia, ¡funciona genial! ¡Gracias! Sin embargo, ¿qué gran número debo agregar? Intenté N en sí y funcionó hasta 5000x5000 (solo terminé las simulaciones), ¿se 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?
Investigación

Respuestas:

10

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 ucD[1,c]1cuA:=(ItuuT)D(ItuuT)t=2/uTu

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:=Dus:=t2uTv/2w:=tvsuO(n)AUNA=re-tuwT-wtuTtuO(norte)

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αα=UNA

Arnold Neumaier
fuente
¡Esto es perfecto!
Investigación
¿Cómo debo cambiar el algoritmo para proporcionarme matrices cuando proporciono los valores propios? Por ejemplo, quiero una matriz no simétrica con valores propios 1,-1,2,-2...50,-50.
Investigación
1
en la receta anterior le da estos valores propios, pero con esta elección la matriz ahora es simétrica indefinida, y CG no resolvería tal problema. Y en su comentario incluso pide una matriz no simétrica, donde el CG tampoco se aplica. Tal vez sea mejor hacer una nueva pregunta con lo que precisamente quieres. re=reyounasol(-50:50)
Arnold Neumaier
3

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. αα

Aron Ahmadia
fuente
1
Para referencia, consulte en.wikipedia.org/wiki/Tikhonov_regularization
Emre
2

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 .

U=yoRyo(θyo)UNA=Udiag(abdominales(X))U
Ryo()yoyo+1 modificación norte

Si desea mejorar el número de condición, puede agregar un valor positivo fijo a y volver a escalar si es necesario.X

Respiro de muerte
fuente
Lo siento, pero mis matemáticas aún no son tan buenas. ¿ denota transposición? ¿Qué significa la rotación en el plano? Además, almacenar 2 vectores será un poco caro, pero aún así, este aspecto le gusta de una manera muy interesante. U
Investigación
Ryo(θyo)=(10 00 0cosθyopecadoθyo-pecadoθyocosθyo1)U
2

XUNA=XXTnorte-1X2X

METROXyo

UNA=yo=1METROXyoXyoT
METROnorteXyoUNAMETROMETROnorteMETROnorte
Wolfgang Bangerth
fuente