Resolvendo enorme sistema linear denso?


11

Existe alguma esperança em resolver o seguinte sistema linear de maneira eficiente com um método iterativo?

ARn×n,xRn,bRn, with n>106

Ax=b

com

A=(ΔK) , ondeΔ é uma matriz muito esparsa com algumas diagonais, decorrente da discretização do operador de Laplace. Na diagonal principal há6 e há6 outras diagonais com1 .

K é umamatrizRn×n completa que consiste completamente de uma.

resolução de A = ΔA=Δ funciona bem com métodos iterativos como Gauss-Seidel, porque é uma matriz esparsa na diagonal dominante. Suspeito que o problema A=(ΔK) seja praticamente impossível de resolver com eficiência para um grande número de n , mas existe algum truque para resolvê-lo, explorando a estrutura de K ?

EDIT: faria algo como

Δxk+1=b+Kxk // resolva paraxk+1 com Gauss-Seidel

ρ(Δ1K)<1ρΔ1Knn=256

Δ

ΔRn×n

É criado da seguinte maneira no matlab

n=W*H*D;

e=ones(W*H*D,1);

d=[e,e,e,-6*e,e,e,e];

delta=spdiags(d, [-W*H, -W, -1, 0, 1, W, W*H], n, n);


Δ

Δ

A Identidade da Matriz de Woodbury ajuda você, já que K é de baixa patente?
Aron Ahmadia

Respostas:


14

n>106n1012ΔΔ

  • Use o sistema limitado

M=(ΔeeT1)

onde é um vetor de coluna que consiste em todos e resolve o sistemae

M(xy)=(b0)

usando um solucionador iterativo ou direto.

  • Use um método Krylov e aplique a matriz como (ou seja, matriz esparsa mais correção de classificação 1. Use seu pré-condicionador existente ou , especialmente se você quiser usar uma resolução direta com , atualize-a com a fórmula de Sherman-Morrison .AΔeeTP1Δ1Δ

Eu tenderia a pensar que você está muito melhor com a segunda abordagem. O ponto simplesmente é que você não deve tentar armazenar a matriz na memória nem tentar fazer um produto vetorial de matriz com ela. Em vez disso, toda vez que você precisar multiplicar por com um vetor em seu esquema iterativo, multiplique e calcule . O termo entre parênteses é apenas a soma das entradas de e você o calcula apenas uma vez. Jed já explicou isso bem, mas eu queria enfatizar a ordem das operações. KAzh=Δzy=he(eTz)z
21912 Wolfgang Bangerth
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.