Ajude a manter o site livre, gratuito e sem propagandas. Colabore!
Em remoção
Nesta seção, vamos discutir sobre a paralelização MP de alguns métodos iterativos para sistemas lineares
(2.31) |
com , e .
Em remoção
Nós podemos escrever a -ésima equação do sistema como
(2.32) |
Isolando , obtemos
(2.33) |
Nesta última equação, temos que pode ser diretamente calculado se todos os elementos , , forem conhecidos. Isso motiva o chamado método de Jacobi que é dado pela seguinte iteração
(2.34) | |||
(2.35) |
para cada e . O número máximo de iterações e o critério de parada podem ser escolhidos de forma adequada.
O pseudocódigo serial para o método de Jacobi pode ser escrito como segue
Alocar a aproximação inicial .
Para :
Para :
.
Verificar o critério de parada.
.
A paralelização MP no método de Jacobi pode ser feita de forma direta e eficaz pela distribuição do laço 2.(a) do pseudocódigo acima. O seguinte código é uma implementação MP do método de Jacobi. Os vetores e são inicializados com elementos randômicos . A matriz é inicializada como uma matriz estritamente diagonal dominante11endnote: 1O método de Jacobi é convergente para matriz estritamente diagonal dominante. com elementos randômicos . O critério de parada é
(2.36) |
onde tol é a tolerância.
Em remoção
No algoritmo serial, observamos que ao calcularmos pela iteração de Jacobi(2.33), as incógnitas , , já foram atualizadas. Isto motivo o método de Gauss-Seidel, cujo algoritmo é descrito no seguinte pseudocódigo:
Alocar a aproximação inicial .
Para :
Para :
.
Verificar o critério de parada.
.
Embora este método seja normalmente muito mais rápido que o método de Jacobi, ele não é paralelizável. Isto se deve ao fato de que o cálculo da incógnita depende dos cálculos precedentes das incógnitas , .
No entanto, a paralelização do método de Gauss-Seidel pode ser viável no caso de matrizes esparsas. Isto ocorre quando o acoplamento entre as equações não é total, podendo-se reagrupar as equações em blocos com base nos seus acoplamentos. Com isso, os blocos podem ser distribuídos entre as instâncias de processamento e, em cada uma, o método de Gauss-Seidel é aplicado de forma serial.
Uma alternativa baseada no Método de Gauss-Seidel, é utilizar o dado atualizado loco que possível, independentemente da ordem a cada iteração. A iteração do tipo Gauss-Seidel pode-se ser escrita da seguinte forma
(2.37) |
onde arbitrariamente correspondem aos índices para os quais já tenham sido atualizados na iteração corrente e corresponde aos índices ainda não atualizados. O pseudocódigo MP deste método pode ser descrito como segue:
Alocar a aproximação inicial .
Para :
.
distribuição de laço em paralelo:
Para :
.
Verificar o critério de parada.
Este método tipo Gauss-Seidel converge mais rápido que o método de Jacobi em muitos casos. Veja [Bertsekas2015a, p. 151–153], para alguns resultados sobre convergência.
A implementação MP do pseudocódigo acima é apresentada no código abaixo. Os elementos dos vetores , e da matriz são inicializados da mesma forma que no código pJacobi.cc
acima.
Em remoção
O Método do Gradiente Conjugado pode ser utilizado na resolução de sistemas lineares , onde é uma matriz simétrica e positiva definida. No caso de sistemas em gerais, o método pode ser utilizado para resolver o sistema equivalente , onde é uma matriz inversível, com denotando a transposta de .
O pseudocódigo deste método é apresentado como segue:
Alocar a aproximação inicial .
Calcular o resíduo .
Alocar a direção .
Para :
.
.
.
.
Uma versão MP deste método pode ser implementada pela distribuição em paralelo de cada uma das operações de produto escalar, multiplicação matriz-vetor e soma vetor-vetor. O seguinte código é uma implementação MP do Método do Gradiente Conjugado. Os elementos do vetor e da matriz são inicializados de forma randômica e é garantida que matriz é simétrica positiva definida.
Em remoção
Faça uma implementação MP para computar a inversa de uma matriz usando o Método de Gauss-Seidel. Assuma que seja uma matriz estritamente diagonal dominante de dimensões ( grande).
A inversa da matriz é a matriz de dimensões tal que
(2.38) |
Denotando por , , as colunas da matriz , temos que o problema de calcular é equivalente a resolver os seguintes sistemas lineares
(2.39) |
onde é a j-ésima coluna da matriz identidade . Podemos usar o método de Gauss-Seidel para computar a solução de cada um destes sistemas lineares. Embora o método não seja paralelizável, os sistemas são independentes um dos outros e podem ser computados em paralelo. O pseudocódigo pode ser escrito como segue:
Alocar a matriz A.
(início da região paralela)
Para (laço em paralelo):
Alocar .
Inicializar .
Resolver pelo Método de Gauss-Seidel
(2.40) |
A implementação fica como Exercício E 2.10.2.
Faça uma implementação MP do método de sobre-relaxação de Jacobi (método JOR) para computar a solução de um sistema linear , com matriz estritamente diagonal dominante de dimensões ( grande).
O método JOR é uma variante do método de Jacobi. A iteração JOR é
(2.41) | |||
(2.42) |
para cada e , com . Note que se , então temos o Método de Jacobi.
Em remoção
Complete o ER 2.10.2.
Complete o ER 2.10.1.
O Método de Richardson para o cálculo da solução de um sistema linear de dimensões tem a seguinte iteração
(2.43) | |||
(2.44) |
onde é uma parâmetro escalar de relaxação e . Faça uma implementação MP deste método.
O Método das Sucessivas Sobre-relaxações (SOR) é uma variante do Método de Gauss-Seidel. A iteração SOR é
(2.45) | |||
(2.46) |
onde , e .
Este método não é paralelizável, mas ele pode ser adaptado pela distribuição paralela do cálculo das incógnitas a cada iteração conforme o Método tipo Gauss-Seidel apresentado na Subseção 2.10.2. Faça a adaptação do Método SOR e implemente em MP.
Faça a implementação do método do Gradiente Conjugado para computar a inversa de uma matriz simétrica positiva definida de dimensões ( grande).
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a Política de Uso de Dados para mais informações. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!