Gerando Matrizes Definidas Positivas Simétricas Usando Índices


8

Eu estava tentando executar casos de teste para CG e preciso gerar:

  • matrizes definidas positivas simétricas
  • de tamanho> 10.000
  • DENSA COMPLETA
  • Usando apenas índices de matriz e, se necessário, 1 vetor (Como A(i,j)=x(i)x(j)(i+j) )

  • Com número de condição menor que 1000.

Eu tentei:

  1. Gerando matrizes aleatórias usando A=rand(N,N)e, em seguida, A'Apara torná-lo Sym. PD. [Isso aumenta o número da condição]

  2. Usando o vetor appraoch como mostrado, mas não consigo obter uma função (x,i,j)que garanta o Sym e o PD.

Depois de muita experimentação, criei:

a(it,jt) = (vec(it)+vec(jt))/((it-1)^2+(jt-1)^2);Se itjt

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

Mas isso é PD até cerca de 500x500.

  1. XLATMR . [Com toda a classificação e redimensionamento, é muito difícil de entender. Especialmente porque eu não consigo entender a álgebra linear subjacente]

Alguém pode me dar uma função em x (vetor) ei, j (índices) que atenda aos requisitos acima?


1
Tente adicionar um número grande (na ordem do número da condição) às entradas diagonais da sua matriz. Isso equivale a adicionar α a cada um dos seus valores próprios e deve melhorar o número da condição. αα
Aron Ahmadia 28/03/12

@AronAhmadia, funciona de forma brilhante! Obrigado! No entanto, qual número grande devo adicionar? Eu tentei o próprio N e funcionou até 5000x5000 (apenas simulações concluídas), usando a+N*eye(N,N)garantirá que funcionará para todos os valores além de 5000? Você pode converter seu comentário em uma resposta?
Inquérito

Respostas:


10

Para obter uma matriz definida positiva densa com o número de condição barato, escolha uma matriz diagonal D cuja diagonal consiste em números de [ 1 , c ] (que serão os valores próprios), com 1 e c escolhido pelo menos uma vez e um vetor u . Em seguida, aplique uma transformação de similaridade, por meio de transformações de Householder, para formar a matriz A : = ( I - t u u T ) D ( I - t u u T ) , em que tcD[1,c]1cuA:=(ItuuT)D(ItuuT) .t=2/uTu

Para formar essa matriz com operações , calcule v : = D u , s : = t 2 u T v / 2 , w : = t v - s u em operações O ( n ) e, em seguida, A como A = D - u w T - w u T . (Se você escolher uO(n2)v:=Dus:=t2uTv/2w:=tvsuO(n)AA=DuwTwuTuO(n)

D

αAαα=A


Isto é perfeito!
Inquérito

Como devo alterar o algoritmo para fornecer matrizes quando forneço os valores de eigen? Por exemplo, eu quero uma matriz não simétrica com valores próprios 1,-1,2,-2...50,-50.
Inquérito 31/03

1
D=Diag(50:50) na receita acima fornece esses autovalores, mas com essa opção a matriz agora é simétrica indefinida, e o CG não resolveria esse problema. E no seu comentário você ainda pede uma matriz não simétrica, pois o CG também não se aplica. Talvez seja melhor fazer uma nova pergunta com o que exatamente você deseja.
Arnold Neumaier 31/03

3

Tente adicionar um número grande (na ordem da norma da matriz) às entradas diagonais da sua matriz. Isso equivale a adicionar a cada um dos seus autovalores e deve melhorar o número da condição reduzindo a diferença entre os autovalores maiores e menores. ααα


1

2

Eu não tenho certeza de como você faria isso com apenas um vetor, mas com dois vetores aleatórios e de tamanho , você pode produzir uma matriz semi-definida positiva via onde é uma rotação no plano dos eixos e .θ N L = Π i R i ( θ i )xθNR i ( ) i i + 1  mod  N

U=iRi(θi)A=Udiag(abs(x))U
Ri()ii+1 mod N

Se você deseja melhorar o número da condição, pode adicionar um valor positivo fixo a e redimensionar, se necessário.x


Sinto muito, mas minha matemática ainda não é tão boa assim. Does denote transposição? O que significa rotação no plano? Além disso, armazenar 2 vetores será um pouco caro, mas ainda assim, esse visual é muito interessante. U
Inquérito

Ri(θi)=(100cosθisinθisinθicosθi1) é a matriz de rotação. denota a matriz transposta conjugada complexa (assumindo que tudo é real, é apenas a transposição). U
Death Breath

2

Uma maneira totalmente diferente de fazer isso seria assim: considere um vetor aleatório , então é uma matriz de classificação um com autovalores iguais a zero e autovalor estritamente positivo igual a com vetor próprio . Também é simétrico.xA=xxTN1x2x

Para construir uma matriz SPD densa, adicione muitas dessas matrizes de classificação 1. Em outras palavras, se você possui vetores (por exemplo, vetores aleatórios), então é SPD se e se os vetores forem linearmente independentes (se eles não são linearmente independentes, então é semidefinido positivo). Você pode verificar se seus vetores (ou os primeiros vetores que você desenha do processo aleatório) são linearmente independentes usando a ortogonalização sucessiva de Gram-Schmidt, mas também é provável que você obtenha uma matriz SPD se simplesmente escolher vetoresx i A = M i = 1 x i x T i M N x i A M M N M NMxi

A=i=1MxixiT
MNxiAMMNMN
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.