Sei sulla pagina 1di 28

UESC - Universidade Estadual de Santa Cruz

PPGMC - Programa de Pos Graduacao em Modelagem Computacional


Disciplina: Metodos Numericos
Professor: Dany Sanchez Dominguez
Discentes: Diogo Pereira Silva de Novais e Paulo Oliveira Paixao
Metodos de Resoluc ao de Sistemas de Equa c oes
Lineares Algebricas
Relat orio de Atividades
2
Sumario
1 Introdu cao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Condicionamento de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 A Matriz de Hilbert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Sistemas Lineares com Matriz de Hilbert como matriz de coecientes . . . . . . . 5
2 Metodos de Resolucao de SELAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1 Metodos Diretos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.1 Metodo de Elimina cao de Gauss . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.2 Metodo de Elimina cao de Gauss com Pivotamento Parcial . . . . . . . . . 6
2.1.3 Metodo de Elimina cao de Gauss com Pivotamento com Escala . . . . . . 6
2.1.4 Metodo de Elimina cao de Gauss com Pivotamento Total . . . . . . . . . . 7
2.2 Metodos Iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1 Convergencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.2 O criterio de parada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.3 Metodo de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.4 Metodo de Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.5 Metodo de sobre-relaxa cao sucessiva . . . . . . . . . . . . . . . . . . . . . 8
3 Inversao de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1 Fatora cao LU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Inversao de Matrizes com Decomposicao LU . . . . . . . . . . . . . . . . . . . . . 9
4 Resultados Obtidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.1 Resolucao de SELAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.2 Inversao de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5 Consideracoes Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1 Introducao 3
1 Introdu cao
Um sistema de equacoes lineares algebricas
1
pode ser visto como um conjunto de equa coes para
o mesmo conjunto de incognitas, acompanhadas de coecientes inteiros[1].
Um sistema de equacoes lineares do tipo:
a
11
x
1
+ a
12
x
2
+ . . . + a
1n
x
n
+ = b
1
a
21
x
1
+ a
22
x
2
+ . . . + a
2n
x
n
+ = b
2
.
.
.
.
.
.
a
n1
x
1
+ a
n2
x
2
+ . . . + a
nn
x
n
+ = b
n
pode ser reescrito na forma matricial como Ax = b com A e b[2]:
A = [a
ij
] =

a
11
a
12
. . . a
1n
a
21
a
22
. . . a
2n
.
.
.
.
.
.
.
.
.
.
.
.
a
n1
a
n2
. . . a
nn

, x =

x
1
x
2
.
.
.
x
n

, b =

b
1
b
2
.
.
.
b
n

onde A e a matriz de coecientes, b o vetor independente e x o vetor de incognitas.


Algumas tecnicas para resolucao destes sistemas utilizam uma matriz aumentada, que
doravante no texto sera chamada de

A, escrita na forma:

A = [a
ij
|b
i
] =

a
11
a
12
. . . a
1n
| b
1
a
21
a
22
. . . a
2n
| b
2
.
.
.
.
.
.
.
.
. |
a
n1
a
n2
. . . a
nn
| b
n

Os sistemas lineares possuem aplica cao em diversos ramos da matematica, como a



Algebra
Linear (que tambem fundamenta a resolucao dos mesmos), a determinacao dos coecientes para
solucao particular de uma equa cao diferencial, enm qualquer problema no qual se queira um
conjunto de incognitas que satisfacam um mesmo conjunto de equacoes.
1.1 Objetivo
Este trabalho objetiva estudar alguns dos principais metodos de resolucao de sistemas de
equacoes lineares, atraves da implementacao computacional dos mesmos e observa coes em rela cao
a condicoes e velocidade de convergencia, erros de arredondamento e outros aspectos relevantes
`a discussao dos metodos.
Este objetivo pode ser subdividido nas seguintes atividades:
Estudar metodos e elencar algoritmos ecientes;
Implementar metodos escolhidos em uma linguagem de programacao;
Testar metodos com estudos de caso que permitam analisar funcionamento dos metodos e
suas limitacoes;
Analisar resultados obtidos em relacao aos erros e velocidade de convergencia, no caso dos
metodos iterativos.
1
Durante o texto, ser ao utilizadas indiscriminadamente as express oes sistemas de equa c oes lineares algebricas,
sistemas de equa c oes lineares, sistemas de equa c oes, sistemas, ou simplesmente SELAS todas com o mesmo
signicado.
1 Introducao 4
1.2 Metodologia
Pode-se dividir o problema de resolu cao computacional de sistemas de equacoes lineares, tanto
pela natureza dos metodos, diretos e iterativos, quanto pela natureza do problema (resolu cao
de um unico sistema linear ou resolucao de um conjunto de sistemas lineares que compartilham
a mesma matriz de coecientes).
Neste trabalho, optou-se pela segunda forma de divisao, que permite alem de discutir carac-
tersticas particulares de cada metodo, realizar compara coes entre metodos diretos e iterativos
e sua ecacia na solucao de determinados problemas.
Os problemas foram implementados em C++, uma linguagem de programacao conhecida
por sua eciencia e utilizada em diversas implementa coes de solucoes numericas.
Um dos motivos da escolha da linguagem foi a possibilidade de utilizacao de ponteiros, que
permitem a manipulacao de tipos de dados grandes, principalmente matrizes, atraves de seu
endereco de memoria, muitas vezes evitando a realizacao de copias desnecessarias de grandes
massas de dados.
O trabalho foi dividido da seguinte forma:
i) A resolu cao de um sistema de equa coes lineares que contem a matriz de Hilbert como
matriz de coecientes.
ii) Calculo da Inversa de uma matriz com problemas de condicionamento.
Para resolu cao dos sistemas lineares foram escolhidas as matrizes de Hilbert de ordem 5,9,15
que conseguem representar grande parte dos problemas de arredondamento utilizando repre-
sentacao de ponto utuante com 8 bytes.
Caso se utilize tipos de dados com maior n umero de algarismos signicativos, pode-se obter
resultados mais precisos. No entanto, dada a continuidade dos intervalos reais, dentro de um
intervalo sempre existirao n umeros nao representaveis em um ambiente discreto. Portanto,
mesmo aumentando o n umero de algarismos signicativos, apenas adiaramos a percep cao dos
problemas para matrizes de Hilbert de ordens maiores que as testadas.
A ecacia dos metodos foi discutida principalmente diante do erro relativo do resultado
encontrado em relacao `a solucao exata (neste caso obtida algebricamente), que pode ser expresso
pela formula[2]:

A
=
|x x|
x
100%
onde x e a solucao exata, e x e uma aproxima cao de x.
Para se discutir a diferen ca entre vetores, deve-se lancar mao de uma norma. Sabendo
da equivalencia de normas no R
n
[4], optou-se por utilizar a norma do maximo para vetores e
matrizes no R
n
, para expressar os erros. Segue normas do maximo para um vetor v e uma
matriz A = [a
ij
] quaisquer[2]:
v

= max
1in
|v
i
|
A

= max
1in
n

1jn
|a
ij
|
Durante o trabalho, tambem foram analisados qualitativamente a aplicabilidade dos metodos
e algumas limita coes diante de problemas especcos, observando seu comportamento para os
estudos de caso.
1.3 Condicionamento de Matrizes
O condicionamento de um sistema de equa coes lineares indica a relacao entre pertuba coes no
vetor independente ou na matriz de coecientes e modica coes na solu cao obtida. Esta rela cao
pode ser expressa numericamente por um n umero conhecido por n umero de condicao[3].
1 Introducao 5
Um sistema no qual pequenas pertuba coes no vetor independente ou na matriz de coecientes
provocam grandes altera coes na solucao do sistema, e dito um sistema malcondicionado[3].
Dada uma matriz A, seu n umero de condicao k(A) pode ser calculado atraves da formula[3]:
k(A) = AA
1

Uma matriz e dita malcondicionada se seu n umero de condicao e muito maior que 1, ou seja
k(A) >> 1 [3].
Dada uma matriz A simetrica, seu n umero de condicao em relacao `a norma euclidiana k
2
(A)
pode ser calculado atraves da formula[3]:
k
2
(A) =

max

min
onde representa os autovalores de A.
O n umero de condi cao de uma matriz de coecientes fornece parametros importantes para
analise dos erros produzidos na solu cao digital de um sistema linear, uma vez que nem sempre
e possvel resolver o sistema, mas sim uma representacao digital do mesmo. Portanto, os erros
de arredondamento podem causar grandes altera coes na solu cao de sistemas malcondicionados.
1.4 A Matriz de Hilbert
A matriz de Hilbert e um exemplo classico de matriz malcondicionada. Em matrizes de Hilbert
de ordens maiores que 4, ja se pode observar n umeros de condi cao maiores que 20 mil[3].
A matriz de Hilbert, e denida por:
H
n
= [h
ij
] =
1
i + j 1
, i = 1, 2 . . . n
ou
H
n
= [h
ij
] =
1
i + j + 1
, i = 0, 1, 2 . . . n 1
em implementa coes computacionais, onde usualmente vetores indexam posi coes a partir de 0.
1.5 Sistemas Lineares com Matriz de Hilbert como matriz de coecientes
Dadas as propriedades da matriz de Hilbert, ela se torna um estudo de caso interessante para
se vericar convergencia e precisao de metodos para solucao de sistemas lineares.
Uma vez denida a matriz de coecientes do sistema A, podemos denir o vetor independente,
de modo que o Sistema de Equa coes admita solucao unica. Como a unicidade da solucao esta
relacionada apenas a matriz de coecientes do sistema, podemos denir o vetor de modo que
facilite a determina cao do vetor solucao x.
Para este trabalho o vetor b = [b
i
] foi denido como b
i
=

n
j=1
a
ij
de modo que o vetor
solucao x contenha todos os seus componentes iguais a 1.
Os sistemas utilizados como estudo de caso tem a seguinte forma:
x
1
+
1
2
x
2
+ . . . +
1
n
x
n
= 1 +
1
2
+ . . . +
1
n
1
2
x
1
+
1
3
x
2
+ . . . +
1
n+1
x
n
=
1
2
+
1
3
+ . . . +
1
n+1
.
.
.
.
.
.
1
n
x
1
+
1
n+1
x
2
+ . . . +
1
2n1
x
n
=
1
n
+
1
n+1
+ . . . +
1
2n1
2 Metodos de Resolucao de SELAS 6
2 Metodos de Resolu cao de SELAS
Por meio de uma sequencia de operacoes um sistema linear pode ser transformado em um
sistema linear mais facil de resolver que tera as mesmas solu coes. Atraves de operacoes como
multiplicacao por escalar nao nulo, adicao e troca de posi coes e pivotamento.
Metodos diretos e metodos iterativos sao apresentados como duas tecnicas para resolucao de
sistemas de equa coes lineares.
2.1 Metodos Diretos
Os metodos diretos determinam as solu coes de um sistema linear com um n umero nito de
opera coes, sendo que parte consideravel destes metodos e baseada no processo de escalonamento
que e aplicado para resolver sistemas de pequeno porte. Uma das principais caractersticas de
tais metodos e ausencia de erros de truncamento.
2.1.1 Metodo de Elimina cao de Gauss
O metodo de elimina cao de Gauss consiste em transformar o sistema dado num sistema trian-
gular equivalente atraves de uma sequencia de operacoes elementares sobre as linhas do sistema
original. As opera coes elementares nao alteram a solucao do sistema, apenas obtem-se com
essas operacoes outro sistema equivalente ao original. O objetivo e organizar essa sequencia de
opera coes elementares de tal forma que o sistema linear resultante seja um sistema triangular
superior. As operacoes elementares sao:
i) trocar duas equacoes de posicao;
ii) multiplicar uma equa cao por uma constante nao nula;
iii) adicionar um m ultiplo de uma equacao a outra equa cao.
Uma vez transformado o sistema linear em um sistema equivalente na forma escalonada, o
mesmo pode ser resolvido por meio de substitui cao regressiva.
2.1.2 Metodo de Elimina cao de Gauss com Pivotamento Parcial
As opera coes sao baseadas na escolha do pivo, isto e, o elemento da diagonal utilizado no calculo
do multiplicador onde, m
ij
=
a
ij
a
ii
para uma matriz A dada. Uma estrategia de pivotamento e
um procedimento onde escolhe-se o pivo em fun cao das caractersticas da matriz. O erros de
arredondamento produzidos pela escolha do pivo podem ser amplicados e produzir um resultado
indesejado na solu cao do sistema principalmente em sistemas maiores.
O pivotamento parcial consiste em escolher o elemento de maior valor absoluto da coluna
como pivo, obtendo 1 m 1 , em seguida, efetuar as opera coes elementares necessarias.
2.1.3 Metodo de Elimina cao de Gauss com Pivotamento com Escala
Os erros de arredondamento no pivotamento parcial ainda assim produzem resultados incon-
sistentes modicando a solucao nal do sistema. As solu coes podem ser melhoradas com o
pivotamento parcial com escala, tambem chamado pivotamento por coluna com escala. Con-
siste em colocar na posicao de pivo o elemento que e maior em rela cao aos elementos em sua
linha atraves do calculo do fator de escala si para cada linha. O efeito da mudan ca de escala
e garantir que o maior elemento em cada linha tenha um modulo relativo igual a 1 antes que a
comparacao para troca de linhas seja realizada.
2 Metodos de Resolucao de SELAS 7
2.1.4 Metodo de Elimina cao de Gauss com Pivotamento Total
O pivotamento completo (maximal) em um passo k, busca todos os elementos a
ij
com i =
k, k +1 . . . , n e j = k, k +1 . . . , n para achar o elemento com maior valor absoluto. As trocas de
linhas e colunas sao executadas para trazer esse elemento para a posicao do pivo. O pivotamento
completo e uma estrategia recomendada para sistemas para os quais a precisao seja essencial e
a quantidade de tempo de execu cao necessaria para esse metodo possa ser justicada.
2.2 Metodos Iterativos
Os metodos iterativos conduzem `a solucao aproximada de um sistema de equacoes lineares da
forma Ax = b por um processo que consiste em gerar, a partir de uma solu cao inicial x
0
um
sequencia de vetores x
1
, x
2
, x
3
, . . . x
k
, . . . que devem convergir para a solu cao x do sistema. Tal
processo e chamado iterativo, pois uma mesma serie de operacoes e repetida varias vezes a qual
deve convergir para a solucao do sistema, sendo estes metodos indicados para solucionar sistemas
grandes e esparsos.
2.2.1 Convergencia
A condicao de convergencia para os metodos de Jacobi e Gauss-Seidel e que a matriz seja diagonal
estritamente dominante, ou seja, que o valor absoluto do elemento da diagonal principal seja
maior que `a soma dos elementos da mesma linha.
2.2.2 O criterio de parada
A cada itera cao a solucao e obtida com precisao crescente e o processo e interrompido quando
o criterio de parada for satisfeito. Neste caso, a tolerancia ou o n umero maximo de iteracoes
foi alcan cado. Quando se utiliza a aritmetica de ponto utuante a exatidao nao pode ser tao
grande quanto se queira, pois ela e limitada de acordo com o n umero de bytes das variaveis do
programa.
2.2.3 Metodo de Jacobi
O metodo de Jacobi para solucao de sistemas de equacoes lineares e um metodo iterativo, onde
parte-se de uma aproximacao inicial x
0
e rena-se a solu cao ate que a diferenca entre o vetor
solucao gerado pela iteracao corrente x
k
e o gerado pela iteracao anterior x
k1
seja pequena.
O elemento x
k
do metodo de Jacobi pode ser obtido atraves da equacao[2]:
x
(k)
i
= b
i

1
a
ii
n

j=1,j=i
a
ij
x
(k1)
ij
2.2.4 Metodo de Gauss-Seidel
O metodo de Gauss-Seidel e uma varia cao do metodo de Jacobi, onde para o calculo de um
termo x
k
do vetor solucao x da iteracao corrente, os termos ja calculados anteriores a k, sao
usados no calculo. Em princpio, esse metodo tende a convergir mais rapido que o de Jacobi,
havendo casos em que isso nao ocorre quando a condicao de convergencia nao e garantida.
O elemento x
(k)
de Gauss-Seidel pode ser denido como[2]:
x
(k)
i
= b
i

1
a
ii

j=1
a
ij
x
(k)
ij
+
n

j=i+1
a
ij
x
(k1)
ij

3 Inversao de Matrizes 8
2.2.5 Metodo de sobre-relaxa cao sucessiva
O metodo de relaxacao sucessiva e uma modica cao no metodo de Gauss-Seidel para acelerar a
convergencia de um sistema Ax = b convergente com o metodo. A equa cao de Gauss-Seidel e
modicada com a escolha de um positivo capaz de reduzir a norma do vetor resduo obtendo
a convergencia mais rapida. Para a escolha de 0 < < 1 da-se o nome de sub-relaxa cao e,
1 < < 2 sobre-relaxa cao. Esses metodos sao particularmente uteis na solu cao dos sistemas
lineares que ocorrem na solucao numerica de certas equacoes diferenciais parciais.
O elemento x
k
de Sobre-relaxacao pode ser obtido pela formula[2]:
x
k
i
= (1 )x
(k1)
i
+
1
a
ii

b
i

i

j=1
a
ij
x
(k)
ij

n

j=i+1
a
ij
x
(k1)
ij

3 Inversao de Matrizes
Como mostrado antes, um sistema linear pode ser reescrito como uma equa cao matricial do tipo
Ax = b. Com alguns passos, pode-se perceber que uma vez obtida a matriz inversa de A, A
1
,
basta multiplicar por b para se encontrar o vetor solucao x do sistema.
Ax = b A
1
Ax = A
1
b x = A
1
b
Ocorre que na pratica, para se calcular a inversa de uma matriz de ordem n e necessario
resolver n sistemas lineares com n equacoes. Ou seja, o problema passaria de resolver um sistema
para resolver n sistemas.
Em algumas aplicacoes, e comum matrizes inversas otimizarem a resolu cao de determinado
problema. Por exemplo, obter uma transformacao linear inversa para uma mudanca de base de
coordenadas em um espaco vetorial. Sendo portanto um problema de interesse a obtencao de
inversas de matrizes nao singulares.
Uma caracterstica particular dos sistemas decorrentes das equa coes para calculo da inversa
de uma matriz, e que os n sistemas possuem a mesma matriz de coecientes. Observe abaixo
que a mesma matriz de coecientes sera utilizada, tendo como vetor b, uma coluna da matriz
identidade[1]:

a
11
a
12
. . . a
1n
a
21
a
22
. . . a
2n
.
.
.
.
.
.
.
.
.
.
.
.
a
n1
a
n2
. . . a
nn

x
i1
x
i2
.
.
.
x
in

I
i1
I
i2
.
.
.
I
in

onde I
ij
representa o elemento da linha i, coluna j da matriz identidade.
3.1 Fatora cao LU
Em [1] e demonstrado que toda matriz A para qual e possvel aplicar o algoritmo de escalona-
mento de Gauss sem troca de linhas pode ser reescrita na forma A = LU, onde:
L =

1 0 . . . 0
m
21
1 . . . 0
.
.
.
.
.
.
.
.
.
0
m
n1
. . . m
n,n1
1

, U =

u
11
u
12
. . . u
1n
0 u
22
. . . u
2n
.
.
.
.
.
.
.
.
.
u
n1,n
0 . . . 0 u
n,n

para a qual, L e a triangular inferior formada pelos elementos pivo da elimina cao de Gauss
(e diagonal D = (1, 1, . . . , 1)) e U triangular superior, formada pelo elementos de mesma posi cao
na matriz A na forma escalonada.
4 Resultados Obtidos 9
Uma vez fatorada a matriz A, podemos resolver dois sistemas mais simples:
Ax = b LUx = b,
logo,
Ux = y Ly = b
Os sistemas Ly = b e Ux = y podem ser resolvidos, respectivamente por substituicao pro-
gressiva e substituicao regressiva.
3.2 Inversao de Matrizes com Decomposi cao LU
Como os sistemas lineares envolvidos no calculo da inversa da matriz possuem todos a mesma
matriz de coecientes A, uma vez realizada a Fatoracao LU, os sistemas podem ser resolvidos
por substituicao progressiva e regressiva, alterando apenas o vetor b para cada sistema.
O grande ganho neste processo e que os metodos diretos para resolucao de sistema ja vistos
possuem custo computacional de ordem O(n
3
)[2], enquanto a substitui cao progressiva ou re-
gressiva possuem custo de ordem O(n
2
) [2]. Desta forma, a partir do segundo sistema, pode-se
achar a solu cao com um custo de ordem O(n
2
).
4 Resultados Obtidos
4.1 Resolu cao de SELAS
As tabelas 1, 2 e 3 mostram um comparativo entre a aplicacao dos metodos implementados para
sistemas de equa cao com matrizes de Hilbert de ordem 5, 9 e 15.
O erro relativo das solu coes foi calculado com base na solucao exata obtida algebricamente.
As matrizes de Hilbert de ordem 5, 9 e 15, possuem n umero de condicao de 47607.25,
4.93 10
11
e 5.38 10
19
, respectivamente, conforme calculos realizados pela fun cao cond() do
Scilab[5]. Valores que reetem o malcondicionamento das matrizes, o que indica que o processo
de discretiza cao da representacao das matrizes de Hilbert provoca alteracoes signicativas nos
sistemas produzidos.
Desta forma, os metodos diretos, mesmo utilizando tecnicas de pivotamento que reduzem o
n umero de arredondamentos nos c alculos, nao conseguem reduzir os efeitos das distorcoes dos
hiperplanos, cuja intersecao representa a solucao do sistema. Para a matriz de Hilbert de ordem
15, nenhum dos metodos diretos obteve respostas com erros aceitaveis.
Alem do malcondicionamento da matriz, as matrizes de Hilbert nao atendem `a condicao de
convergencia dos metodos de Jacobi e de Gauss-Seidel, de ser uma matriz estritamente diagonal
dominante.
O metodo de Jacobi nao foi capaz de produzir solucoes para nenhuma das matrizes, di-
vergindo para todos os testes com matrizes de ordem superior a 2, enquanto o metodo de
Gauss-Seidel e a Sobre-relacao apresentaram resultados com com erros inferiores a 3% para as
matrizes de ordem 5 e 9 e de pouco mais de 5% para a matriz de ordem 15.
Como pode ser observado nas tabelas 1, 2 e 3, a sobre-rela cao utilizada com = 1.25,
valor obtido em testes com alguma convergencia, nao reduz o erro em relacao ao metodo sem
sobre-relaxacao com o mesmo n umero de iteracoes. Isto se deve ao fato do metodo nao ser
convergente para o sistema dado e, neste caso, o mais recomendado e o uso de metodos de
sub-relacao. Testes com = 0.85, apresentaram erros menores que o metodo de Gauss-Seidel
sem sobre(ou sub)-relaxa cao.
4 Resultados Obtidos 10
Tab. 1: Solu cao de Sistema com Matriz de Hilbert de ordem 5
Metodo de Resolucao Erro Aproximado N
o
de Iteracoes
Metodo de Gauss 0.000000000259126053947511536535% Nao se Aplica
Pivotamento Parcial 0.000000000061683991248173697386% Nao se Aplica
Pivotamento Parcial com Escala 0.000000000259126053947511536535% Nao se Aplica
Pivotamento Total 0.000000000814059930576149781700% Nao se Aplica
Jacobi inf% 578
Gauss-Seidel 1.592361248495766101740400699782% 1000
Gauss-Seidel com sobre-relaxa cao 2.735363927797318517320945829852% 1000
Tab. 2: Solu cao de Sistema com Matriz de Hilbert de ordem 9
Metodo de Resolucao Erro Aproximado N
o
de Iteracoes
Metodo de Gauss 0.001686911388609768636115404661% Nao se Aplica
Pivotamento Parcial 0.001957808697039542522588817519% Nao se Aplica
Pivotamento Parcial com Escala 0.001686911388609768636115404661% Nao se Aplica
Pivotamento Total 0.001488639088398358012454991695% Nao se Aplica
Jacobi inf% 371
Gauss-Seidel 2.351098041520716108720989723224% 1000
Gauss-Seidel com sobre-relaxa cao 2.690402535904157232948819000740% 1000
Tab. 3: Solucao de Sistema com Matriz de Hilbert de ordem 15
Metodo de Resolucao Erro Aproximado N
o
de Iteracoes
Metodo de Gauss 835.504756710912829476001206785440 Nao se Aplica
Pivotamento Parcial 685.392973636933788839087355881929% Nao se Aplica
Pivotamento Parcial com Escala 835.504756711068807817355263978243% Nao se Aplica
Pivotamento Total 1228.611244707814876164775341749191% Nao se Aplica
Jacobi inf% 288
Gauss-Seidel 3.830803610905175737855188344838% 1000
Gauss-Seidel com sobre-relaxa cao 5.431192735852685693487273965729% 1000
4 Resultados Obtidos 11
4.2 Inversao de Matrizes
Uma matriz nao singular (invertvel) possui determinante det(A) = 0. No entanto, matrizes
quase singulares (determinantes pr oximos de 0), tambem apresentam problemas em solucoes
computacionais.
Alem disso, uma matriz mal condicionada resulta em sistemas lineares malcondicionados para
o calculo de sua inversa, gerando distorcoes nos sistemas e solu coes computacionais possivelmente
distantes da inversa da matriz que se deseja de fato inverter.
Foram realizados testes com os metodos implementados de calculo da inversa de duas inversas
atraves do metodo de decomposicao LU, sendo a matriz M
1
uma matriz com um bom n umero
de condicao e matriz M
2
uma matriz malcondicionada.
Seguem as matrizes utilizadas para testes:
M
1
=

10 2 1
3 6 2
1 1 5

, cond(M
1
) = 2.4579536, det(M
1
) = 289 (1)
Matriz Inversa: M
1
1

0.1107266436 0.0380622837 0.0069204152


0.0588235294 0.1764705882 0.0588235294
0.0103806228 0.0276816609 0.1868512111

Produto das Matrizes:

1.0000000000 0.0000000000 0.0000000000


0.0000000000 1.0000000000 0.0000000000
0.0000000000 0.0000000000 1.0000000000

Resduo: 0.0000000000%
M
2
=

1 4 9 16
4 9 16 25
9 16 25 36
16 25 36 49

, cond(M
2
) = 3.96 10
17
, det(M
2
) = 5.053 10
14
(2)
Matriz Inversa: M
1
2

20105355479335.3125 60316066438001.1250 60316066437998.6250 20105355479332.3125


60316066438000.2343 180948199313995.7812 180948199313993.4375 60316066437997.3593
60316066437997.0859 180948199313992.0312 180948199313992.5000 60316066437997.5859
20105355479331.6953 60316066437996.6406 60316066437997.3359 20105355479332.5703

Produto das Matrizes:

1.4375000000 1.3125000000 2.0000000000 4.2500000000


0.3750000000 0.0000000000 0.5000000000 2.5000000000
0.1250000000 0.2500000000 0.0000000000 1.0000000000
0.0000000000 0.1250000000 0.0000000000 1.0000000000

Resduo: 800.00000000%
Conforme podemos observar em (1) e (2), de acordo com os valores dos n umeros de condicao
das matrizes M
1
e M
2
, M
1
e uma matriz nao-singular e bem condicionada. Desta forma podemos
computacionalmente obter uma boa aproximacao para M
1
1
.
Ja M
2
, possui um n umero de condicao cond(M
2
) = 3.96 10
17
, sendo portanto malcondi-
cionada. Conforme podemos observar no exemplo, e computacionalmente inviavel o calculo da
matriz M
1
2
.
5 Consideracoes Finais 12
Como podemos observar pelos resultados, a matriz M
1
1
pode ser obtida e seu produto
por M
1
retorna uma boa aproxima cao da matriz identidade. Ja a matriz M
1
2
nao pode ser
obtida, pois a matriz M
2
e singular. O calculo de determinantes de matrizes envolve apenas
multiplicacoes e subtracoes, que operacoes fechadas em Z. O n umero proximo de zero obtido
pelo calculo no Scilab resulta de problemas de representa cao, sendo na verdade 0.
O determinante da matriz M
1
pode ser conrmado atraves de calculos algebricos, ou ate
mesmo num software de manipula cao simbolica, como o Maxima, para o qual o determinante
desta matriz e 0.
5 Considera coes Finais
Apesar da facilidade de implementacao e praticidade na resolu cao computacional de proble-
mas de sistemas lineares apresentados pelos metodos numericos, as limitacoes de representacao
numerica em ponto utuante e sua aritmetica podem gerar erros de modo que solucao encontrada
nao satisfaca o problema inicial.
Grande parte dos parametros que indicam que um determinado sistema linear apresentara
uma boa aproxima cao da solu cao do problema, estao relacionados a propriedades da matriz de
coecientes, que envolvem solu cao de sistemas lineares em seus calculos, a exemplo o determi-
nante, n umero de condicao e raio espectral de uma matriz.
Muitas vezes, no caso de metodos iterativos, e mais razoavel observar o comportamento das
estimativas produzidas, de modo a inferir a convergencia ou divergencia do metodo.
A matriz de Hilbert se mostrou um bom exemplo para analisar limitacoes de metodos
numericos e suas implementa coes computacionais.
Por m, a implementacao dos mesmos algoritmos com outros tipos de representa cao numerica,
utilizando aritmetica intervalar, por exemplo, pode gerar novos resultados que tratem melhor os
erros de arredondamento e problemas de representacao discreta de sistemas lineares apresentados
no texto.
Referencias
[1] BERGAMASCHI, Flaulles B. Calculo Numerico com Matlab. Disponvel em:
http://www.uesb.br/professor/aulles/download/cursos/APCN.pdf. Acesso em: 10 de
Abril de 2014.
[2] BURDEN, Richard L. e FAIRES, J. D. Analise Numerica. Sao Paulo. Cencage Learning. 2
a
Ed. 2011.
[3] CAMPOS FILHO, Frederico F. Algoritmos Numericos. Rio de Janeiro, LTC. 2001.
[4] LIMA, E. L.: Curso de Analise vol.2. Projeto Euclides. Rio de Janeiro, IMPA. 1989.
[5] SCILAB Enterprises. Pagina ocial do Scilab. 2014. Disponvel em: http://scilab.org. Acesso
em 20/05/2014.
5 Consideracoes Finais 13
Apendice - Codigo Fonte da Aplica cao Desenvolvida
Fun cao Principal da Aplicacao
1 #i nc l ude <i ostream>
2 #i nc l ude <c s t dl i b >
3 #i nc l ude a u x i l i a r e s . h
4 #i nc l ude a u x i l i a r e s . cpp
5 #i nc l ude met odos di r et os . h
6 #i nc l ude met odos di r et os . cpp
7 #i nc l ude me t odos i t e r at i vos . h
8 #i nc l ude me t odos i t e r at i vos . cpp
9
10 us i ng namespace std ;
11
12 i nt main ( )
13 {
14 i nt opcao , n=2;
15 doubl e matri z ;
16 doubl e matri z2 ;
17 doubl e matri z3 ;
18 doubl e s ol ucao ;
19 doubl e e r r o ;
20 doubl e r e l ax ;
21 i nt di mensoes [ 3 ] ;
22 s t r i ng msg = \n ;
23 msg += ( 1) Res ol ver Si stema Li near com Matri z de Hi l be r t \n ;
24 msg += ( 2) Cal cul ar I nver s a de Matri z \n ;
25 msg += ( 0) Sai r \n ;
26 msg += \n ;
27 msg += Inf orme sua op c ao : \n ;
28
29 s t r i ng msg2 = \n ;
30 msg2 += ( 1) Metodo de Gauss \n ;
31 msg2 += ( 2) Metodo de Gauss com Pi votamento Par c i al \n ;
32 msg2 += ( 3) Metodo de Gauss com Pi votamento com Escal a \n ;
33 msg2 += ( 4) Metodo de Gauss com Pi votamento Total \n ;
34 msg2 += ( 5) Metodo de Jacobi \n ;
35 msg2 += ( 6) Metodo de GaussSe i de l \n ;
36 msg2 += ( 7) Metodo de GaussSe i de l com Sobrerel axamento \n ;
37 msg2 += \n ;
38 msg2 += Inf orme sua op c ao : \n ;
39
40 s t r i ng msg3 = \n ;
41 msg3 += ( 1) I nve t e r matri z quadrada qual quer \n ;
42 msg3 += ( 2) I nve t e r matri z de exemplo \n ;
43 msg3 += \n ;
44 msg3 += Inf orme sua op c ao : \n ;
45 cout . s e t f ( std : : i o s : : f i xed , std : : i o s : : f l o a t f i e l d ) ;
46 cout . pr e c i s i o n ( 15) ;
47 cout << msg ;
48 ci n>> opcao ;
49 whi l e ( opcao ! =0) {
50 swi t ch ( opcao ) {
51 cas e 1:
52 cout << Inf orme a ordem da matri z de Hi l be r t que de s e j a u t i l i z a r
: \ n ;
53 ci n >> n ;
54 matri z = new doubl e [ n ] ;
55 f o r ( i nt i =0; i <n ; i ++){
56 matri z [ i ] = new doubl e [ n+1] ;
57 }
58 s ol ucao = new doubl e [ n+1] ;
5 Consideracoes Finais 14
59 mat r i z Hi l be r t ( matri z , n) ;
60 cout << msg2 ;
61 ci n >> opcao ;
62 swi t ch ( opcao ) {
63 cas e 1:
64 gauss ( matri z , sol ucao , n) ;
65 e r r o = e r r oHi l be r t ( sol ucao , n) ;
66 cout << Sol u c ao encontrada : \ n ;
67 e xi bi r Ve t or ( sol ucao , n) ;
68 cout << Erro : << e r r o << %\n ;
69 break ;
70 cas e 2:
71 gaussPi vot eament oParci al ( matri z , sol ucao , n) ;
72 e r r o = e r r oHi l be r t ( sol ucao , n) ;
73 cout << Sol u c ao encontrada : \ n ;
74 e xi bi r Ve t or ( sol ucao , n) ;
75 cout << Erro : << e r r o << %\n ;
76 break ;
77 cas e 3:
78 gaussPi voteamentoComEscal a ( matri z , sol ucao , n) ;
79 e r r o = e r r oHi l be r t ( sol ucao , n) ;
80 cout << Sol u c ao encontrada : \ n ;
81 e xi bi r Ve t or ( sol ucao , n) ;
82 cout << Erro : << e r r o << %\n ;
83 break ;
84 cas e 4:
85 gaussPi voteamentoTotal ( matri z , sol ucao , n) ;
86 e r r o = e r r oHi l be r t ( sol ucao , n) ;
87 cout << Sol u c ao encontrada : \ n ;
88 e xi bi r Ve t or ( sol ucao , n) ;
89 cout << Erro : << e r r o << %\n ;
90 break ;
91 cas e 5:
92 j ac obi ( matri z , sol ucao , n , 0 . 1 e 3 , 1000) ;
93 e r r o = e r r oHi l be r t ( sol ucao , n) ;
94 cout << Sol u c ao encontrada : \ n ;
95 e xi bi r Ve t or ( sol ucao , n) ;
96 cout << Erro : << e r r o << %\n ;
97 break ;
98 cas e 6:
99 gaus s Se i de l ( matri z , sol ucao , n , 0 . 1 e 3 , 1000) ;
100 e r r o = e r r oHi l be r t ( sol ucao , n) ;
101 cout << Sol u c ao encontrada : \ n ;
102 e xi bi r Ve t or ( sol ucao , n) ;
103 cout << Erro : << e r r o << %\n ;
104 break ;
105 cas e 7:
106 r e l ax =1. 25;
107 gaussSei del SOR ( matri z , sol ucao , n , 0 . 1 e 3 , 1000 , r e l ax ) ;
108 e r r o = e r r oHi l be r t ( sol ucao , n) ;
109 cout << Sol u c ao encontrada : \ n ;
110 e xi bi r Ve t or ( sol ucao , n) ;
111 cout << Erro : << e r r o << %\n ;
112 break ;
113 de f aul t :
114 cout << Op c ao i nv al i da . \ n ;
115 }
116 break ;
117 cas e 2:
118 cout << msg3 ;
119 ci n >> opcao ;
120 swi t ch ( opcao ) {
121 cas e 1:
5 Consideracoes Finais 15
122 cout << N ao implementado ai nda \n ;
123 break ;
124 cas e 2:
125 n=3;
126 matri z = new doubl e [ n ] ;
127 matri z2 = new doubl e [ n ] ;
128 matri z3 = new doubl e [ n ] ;
129 f o r ( i nt i =0; i <n ; i ++){
130 matri z [ i ] = new doubl e [ n+1] ;
131 matri z2 [ i ] = new doubl e [ n+1] ;
132 matri z3 [ i ] = new doubl e [ n+1] ;
133 }
134 matrizExemplo5 ( matri z ) ;
135 matrizExemplo5 ( matri z2 ) ;
136 cout << \nM1\n << endl ;
137 e xi bi r Mat r i z ( matri z , n , n) ;
138 i nve r t e r Mat r i z ( matri z , n) ;
139 cout << \nMatri z I nver s a : $ \n ;
140 e xi bi r Mat r i z ( matri z , n , n) ;
141 mul t i pl i c aMat r i z ( matri z , matri z2 , matri z3 , n) ;
142 cout << \nProduto das Matri zes : \ n ;
143 e xi bi r Mat r i z ( matri z3 , n , n) ;
144 mat r i zI dent i dade ( matri z2 , n) ;
145 s ubt r ai r Mat r i z ( matri z3 , matri z2 , n) ;
146 e r r o = normaMatriz ( matri z3 , n) 100;
147 cout << Res duo : << e r r o << %\n ;
148
149 n=4;
150 matri z = new doubl e [ n ] ;
151 matri z2 = new doubl e [ n ] ;
152 matri z3 = new doubl e [ n ] ;
153 f o r ( i nt i =0; i <n ; i ++){
154 matri z [ i ] = new doubl e [ n+1] ;
155 matri z2 [ i ] = new doubl e [ n+1] ;
156 matri z3 [ i ] = new doubl e [ n+1] ;
157 }
158 matrizExemplo4 ( matri z ) ;
159 matrizExemplo4 ( matri z2 ) ;
160 cout << \nM1\n << endl ;
161 e xi bi r Mat r i z ( matri z , n , n) ;
162 i nve r t e r Mat r i z ( matri z , n) ;
163 cout << \nMatri z I nver s a : \ n ;
164 e xi bi r Mat r i z ( matri z , n , n) ;
165 mul t i pl i c aMat r i z ( matri z , matri z2 , matri z3 , n) ;
166 cout << \nProduto das Matri zes : \ n ;
167 e xi bi r Mat r i z ( matri z3 , n , n) ;
168 mat r i zI dent i dade ( matri z2 , n) ;
169 s ubt r ai r Mat r i z ( matri z3 , matri z2 , n) ;
170 e r r o = normaMatriz ( matri z3 , n) 100;
171 cout << Res duo : << e r r o << %\n ;
172 break ;
173 }
174 break ;
175 }
176 cout << msg ;
177 ci n>> opcao ;
178 system( c l e a r ) ;
179 }
180 r et ur n 0;
181 }
Metodos Diretos
5 Consideracoes Finais 16
1 #i ncl ude <i ostream>
2 #i ncl ude <cmath>
3 #i nc l ude met odos di r et os . h
4 #i nc l ude a u x i l i a r e s . h
5
6 us i ng namespace std ;
7 /
8 Metodo de Subs t i t ui c ao Regr es s i va para s ol u c ao
9 de SELAS t r i a ng ul a r e s i n f e r i o r e s
10 Entradas :
11 matri z : matri z ampl i ada do s i s t ema
12 s ol ucao : vet or onde s e r a armazenado o vet or s ol u c ao
13 n : n umero de equa c oes do s i s t ema
14 /
15 bool s ubs t i t ui c aoRe gr e s s i va ( doubl e matri z , doubl e sol ucao , i nt n) {
16 n;
17 doubl e soma ;
18 s ol ucao [ n ] = matri z [ n ] [ n + 1] / matri z [ n ] [ n ] ;
19 f o r ( i nt i = n 1; i >= 0; i ) {
20 soma = 0;
21 f o r ( i nt j = i + 1; j <= n ; j ++) {
22 soma += matri z [ i ] [ j ] s ol ucao [ j ] ;
23 }
24 s ol ucao [ i ] = ( matri z [ i ] [ n + 1] soma) / matri z [ i ] [ i ] ;
25 }
26 r et ur n t r ue ;
27 }
28 /
29 Metodo de Subs t i t ui c ao Regr es s i va para s ol u c ao
30 de SELAS t r i a ng ul a r e s i n f e r i o r e s com
31 separa c ao de matri z de c o e f i c i e n t e s do vet or
32 i ndependente
33 Entradas :
34 matri z : matri z de c o e f i c i e n t e s do s i s t ema
35 s ol ucao : vet or onde s e r a armazenado o vet or s ol u c ao
36 b : vet or i ndependente
37 n : n umero de equa c oes do s i s t ema
38 /
39 bool s ubs t i t ui caoRegr es s i vaLU ( doubl e matri z , doubl e sol ucao , doubl e b , i nt n)
{
40 n;
41 doubl e soma ;
42 s ol ucao [ n ] = b [ n] / matri z [ n ] [ n ] ;
43 f o r ( i nt i = n 1; i >= 0; i ) {
44 soma = 0;
45 f o r ( i nt j = i + 1; j <= n ; j ++) {
46 soma += matri z [ i ] [ j ] s ol ucao [ j ] ;
47 }
48 s ol ucao [ i ] = ( b [ i ] soma) / matri z [ i ] [ i ] ;
49 }
50 r et ur n t r ue ;
51 }
52 /
53 Metodo de Subs t i t ui c ao Pr ogr e s s i va para s ol u c ao
54 de SELAS t r i a ng ul a r e s i n f e r i o r e s
55 Entradas :
56 matri z : matri z ampl i ada do s i s t ema
57 s ol ucao : vet or onde s e r a armazenado o vet or s ol u c ao
58 n : n umero de equa c oes do s i s t ema
59 /
60 bool s ubs t i t ui c aoPr ogr e s s i va ( doubl e matri z , doubl e sol ucao , doubl e b , i nt n) {
61 n;
62 doubl e soma ;
5 Consideracoes Finais 17
63 s ol ucao [ 0 ] = b [ 0 ] / matri z [ 0 ] [ 0 ] ;
64 f o r ( i nt i = 1; i <= n ; i ++) {
65 soma = 0;
66 f o r ( i nt j = 0; j < i ; j ++) {
67 soma += matri z [ i ] [ j ] s ol ucao [ j ] ;
68 }
69 s ol ucao [ i ] = ( b [ i ] soma) / matri z [ i ] [ i ] ;
70 }
71 r et ur n t r ue ;
72 }
73 /
74 Metodo de Subs t i t ui c ao Regr es s i va para s ol u c ao
75 de SELAS t r i a ng ul a r e s i n f e r i o r e s a com
76 endere co v i r t ua l de col unas
77 Entradas :
78 matri z : matri z ampl i ada do s i s t ema
79 s ol ucao : vet or onde s e r a armazenado o vet or s ol u c ao
80 c ol : vet or com pos i c ao v i r t ua l de col unas
81 n : n umero de equa c oes do s i s t ema
82 /
83 bool s ubs t i t ui c aoRe gr e s s i vaP ( doubl e matri z , doubl e sol ucao , i nt col , i nt n) {
84 n;
85 doubl e soma ;
86 s ol ucao [ c ol [ n ] ] = matri z [ n ] [ n + 1] / matri z [ n ] [ c ol [ n ] ] ;
87 f o r ( i nt i = n 1; i >= 0; i ) {
88 soma = 0;
89 f o r ( i nt j = i + 1; j <= n ; j ++) {
90 soma += matri z [ i ] [ c ol [ j ] ] s ol ucao [ c ol [ j ] ] ;
91 }
92 s ol ucao [ c ol [ i ] ] = ( matri z [ i ] [ c ol [ n + 1 ] ] soma) / matri z [ i ] [ c ol [ i ] ] ;
93 }
94 r et ur n t r ue ;
95 }
96 /
97 Metodo de Escal onamento de Gauss para Resol u c ao de SELAS
98 Entradas :
99 matri z : matri z ampl i ada do s i s t ema
100 s ol ucao : vet or onde s e r a armazenado o vet or s ol u c ao
101 n : n umero de equa c oes do s i s t ema
102 /
103 bool gauss ( doubl e matri z , doubl e sol ucao , i nt n) {
104 n;
105 doubl e m;
106 f o r ( i nt i = 0; i < n ; i ++) {
107 i f ( matri z [ i ] [ i ] == 0) {
108 r et ur n f a l s e ;
109 }
110 f o r ( i nt j = i + 1; j <= n ; j ++) {
111 m = matri z [ j ] [ i ] / matri z [ i ] [ i ] ;
112 f o r ( i nt k = i + 1; k <= n + 1; k++) {
113 matri z [ j ] [ k ] = matri z [ j ] [ k] (m matri z [ i ] [ k ] ) ;
114 }
115 }
116 }
117 i f ( matri z [ n ] [ n ] == 0) {
118 r et ur n f a l s e ;
119 }
120 s ubs t i t ui c aoRe gr e s s i va ( matri z , sol ucao , n + 1) ;
121 r et ur n t r ue ;
122 }
123 /
124 Metodo de Escal onamento de Gauss com Pi votamento Par c i al
125 para Resol uc ao de SELAS
5 Consideracoes Finais 18
126 Entradas :
127 matri z : matri z ampl i ada do s i s t ema
128 s ol ucao : vet or onde s e r a armazenado o vet or s ol u c ao
129 n : n umero de equa c oes do s i s t ema
130 /
131 bool gaussPi vot eament oPar ci al ( doubl e matri z , doubl e sol ucao , i nt n) {
132 n;
133 doubl e m, temp ;
134 i nt p , k ;
135 f o r ( i nt i = 0; i < n ; i ++) {
136 p = i ;
137 f o r ( k = i + 1; k <= n ; k++) {
138 i f ( f abs ( matri z [ p ] [ i ] ) < f abs ( matri z [ k ] [ i ] ) ) {
139 p = k ;
140 }
141 }
142 i f ( matri z [ p ] [ i ] == 0) {
143 r et ur n f a l s e ;
144 }
145 i f ( i != p) {// t r oca de l i nhas
146 temp = matri z [ i ] ;
147 matri z [ i ] = matri z [ p ] ;
148 matri z [ p ] = temp ;
149 }
150 f o r ( i nt j = i + 1; j <= n ; j ++) {
151 m = matri z [ j ] [ i ] / matri z [ i ] [ i ] ;
152 f o r ( k = i + 1; k <= n + 1; k++) {
153 matri z [ j ] [ k ] = matri z [ j ] [ k] (m matri z [ i ] [ k ] ) ;
154 }
155 }
156 }
157 i f ( matri z [ n ] [ n ] == 0) {
158 r et ur n f a l s e ;
159 }
160 s ubs t i t ui c aoRe gr e s s i va ( matri z , sol ucao , n + 1) ;
161 r et ur n t r ue ;
162 }
163 /
164 Metodo de Escal onamento de Gauss com Pi votamento com
165 e s c al a para Resol u c ao de SELAS
166 Entradas :
167 matri z : matri z ampl i ada do s i s t ema
168 s ol ucao : vet or onde s e r a armazenado o vet or s ol u c ao
169 n : n umero de equa c oes do s i s t ema
170 /
171 bool gaussPi voteamentoComEscal a ( doubl e matri z , doubl e sol ucao , i nt n) {
172 n;
173 doubl e m, sMaior , s i , temp ;
174 i nt p , k , k2 ;
175 f o r ( i nt i = 0; i < n ; i ++) {
176 sMai or =0;
177 p = i ;
178 f o r ( k = i ; k <= n ; k++) {
179 s i = f abs ( matri z [ k ] [ i ] ) ;
180 // encontra mai or val or abs ol ut o da l i nha
181 f o r ( k2=i ; k2 <= n ; k2++){
182 i f ( f abs ( matri z [ k ] [ k2 ] ) > s i ) {
183 s i = f abs ( matri z [ k ] [ k2 ] ) ;
184 }
185 }
186 s i = matri z [ k ] [ i ] / s i ;
187 i f ( sMai or < s i ) {
188 sMai or = s i ;
5 Consideracoes Finais 19
189 p = k ;
190 }
191 }
192 i f ( matri z [ p ] [ i ] == 0) {
193 r et ur n f a l s e ;
194 }
195 i f ( i != p) {// t r oca de l i nhas
196 temp = matri z [ i ] ;
197 matri z [ i ] = matri z [ p ] ;
198 matri z [ p ] = temp ;
199 }
200 f o r ( i nt j = i + 1; j <= n ; j ++) {
201 m = matri z [ j ] [ i ] / matri z [ i ] [ i ] ;
202 f o r ( k = i + 1; k <= n + 1; k++) {
203 matri z [ j ] [ k ] = matri z [ j ] [ k] (m matri z [ i ] [ k ] ) ;
204 }
205 }
206 }
207 i f ( matri z [ n ] [ n ] == 0) {
208 r et ur n f a l s e ;
209 }
210 s ubs t i t ui c aoRe gr e s s i va ( matri z , sol ucao , n + 1) ;
211 r et ur n t r ue ;
212 }
213 /
214 Metodo de Escal onamento de Gauss com Pi votamento Total
215 para Resol uc ao de SELAS
216 Entradas :
217 matri z : matri z ampl i ada do s i s t ema
218 s ol ucao : vet or onde s e r a armazenado o vet or s ol u c ao
219 n : n umero de equa c oes do s i s t ema
220 /
221 bool gaussPi voteamentoTotal ( doubl e matri z , doubl e sol ucao , i nt n) {
222 n;
223 doubl e m, temp ;
224 i nt ncol [ n+1] ;
225 i nt pi , pj , k , k2 , temp2 ;
226 f o r ( i nt i = 0; i <= n + 1; i ++) {
227 ncol [ i ] = i ;
228 }
229 f o r ( i nt i = 0; i < n ; i ++) {
230 pi = pj = i ;
231 f o r ( k = i ; k <= n ; k++) {
232 f o r ( k2 = i ; k2 <= n ; k2++) {
233 i f ( f abs ( matri z [ pi ] [ ncol [ pj ] ] ) < f abs ( matri z [ k ] [ ncol [ k2 ] ] ) ) {
234 pi = k ;
235 pj = k2 ;
236 }
237 }
238 }
239 i f ( matri z [ pi ] [ ncol [ pj ] ] == 0) {
240 cout << e r r or ;
241 r et ur n f a l s e ;
242 }
243 i f ( i != pi ) {// t r oca de l i nhas
244 temp = matri z [ i ] ;
245 matri z [ i ] = matri z [ pi ] ;
246 matri z [ pi ] = temp ;
247 }
248 i f ( i != pj ) {// t r oca de col una
249 temp2 = ncol [ pj ] ;
250 ncol [ pj ] = ncol [ i ] ;
251 ncol [ i ] = temp2 ;
5 Consideracoes Finais 20
252 }
253 f o r ( i nt j = i + 1; j <= n ; j ++) {
254 m = matri z [ j ] [ ncol [ i ] ] / matri z [ i ] [ ncol [ i ] ] ;
255 f o r ( k = i + 1; k <= n + 1; k++) {
256 matri z [ j ] [ ncol [ k ] ] = matri z [ j ] [ ncol [ k] ] (m matri z [ i ] [ ncol [ k ] ] ) ;
257 }
258 }
259 }
260 i f ( matri z [ n ] [ ncol [ n ] ] == 0) {
261 cout << e r r o 1 ;
262 r et ur n f a l s e ;
263 }
264 s ubs t i t ui c aoRe gr e s s i vaP ( matri z , sol ucao , ncol , n + 1) ;
265 r et ur n t r ue ;
266 }
267 /
268 Metodo de Fatora c ao LU de Matri zes
269 Fatora uma matri z em L e U de modo que A = LU
270 Entradas :
271 matri z : matri z a s e r f at or ada
272 l : matri z onde s e r a armazenada matri z L
273 u : matri z onde s e r a armazenada matri z U
274 n : tamanho da matri z
275 /
276 voi d f atoracaoLU ( doubl e matri z , doubl e l , doubl e u , i nt n) {
277 n;
278 doubl e m;
279 f o r ( i nt i = 0; i < n ; i ++) {
280 i f ( matri z [ i ] [ i ] == 0) {
281 cout << e r r o ;
282 }
283 f o r ( i nt j = i + 1; j <= n ; j ++) {
284 m = matri z [ j ] [ i ] / matri z [ i ] [ i ] ;
285 l [ j ] [ i ] = m;
286 f o r ( i nt k = i + 1; k <= n + 1; k++) {
287 matri z [ j ] [ k ] = matri z [ j ] [ k] (m matri z [ i ] [ k ] ) ;
288 }
289 }
290 }
291 f o r ( i nt i =0; i <=n ; i ++){
292 l [ i ] [ i ] = 1;
293 f o r ( i nt j=i ; j<=n ; j ++){
294 u [ i ] [ j ] = matri z [ i ] [ j ] ;
295 }
296 }
297 }
298 /
299 I nver s ao de Matri z at r aves de f at or a c ao LU
300 Entradas :
301 matri z : matri z a s e r i nve r t i da
302 n : tamanho da matri z
303 /
304 voi d i nve r t e r Mat r i z ( doubl e matri z , i nt n) {
305 i nt i ;
306 doubl e y [ n ] ;
307 doubl e matrizB = new doubl e [ n ] ;
308 doubl e i nve r s a = new doubl e [ n ] ;
309 doubl e l = new doubl e [ n ] ;
310 doubl e u = new doubl e [ n ] ;
311 f o r ( i =0; i <n ; i ++){
312 i nve r s a [ i ] = new doubl e [ n ] ;
313 l [ i ] = new doubl e [ n ] ;
314 u [ i ] = new doubl e [ n ] ;
5 Consideracoes Finais 21
315 }
316 f atoracaoLU ( matri z , l , u , n) ;
317 f o r ( i =0; i <n ; i ++){
318 col unaI dent i dade ( matrizB , i , n) ;
319 s ubs t i t ui c aoPr ogr e s s i va ( l , y , matrizB , n) ;
320 //armazena na l i nha i de i nve r s a col una i da i nve r s a
321 s ubs t i t ui caoRegr es s i vaLU ( u , i nve r s a [ i ] , y , n) ;
322 }
323 // c o r r i g e col unas da i nver s a , armazenadas ant es como l i nhas
324 t r ans pos t a ( i nver s a , n) ;
325 f o r ( i =0; i <n ; i ++){
326 matri z [ i ] = i nve r s a [ i ] ;
327 }
328 }
Metodos Iterativos
1 #i ncl ude <cmath>
2
3 #i nc l ude me t odos i t e r at i vos . h
4 #i nc l ude a u x i l i a r e s . h
5 /
6 Metodo de Jacobi para Resol u c ao de SELAS
7 Entradas :
8 matri z : matri z ampl i ada do s i s t ema
9 s ol ucao : vet or onde s e r a armazenado o vet or s ol u c ao
10 obs . : e s t e vet or deve pos s ui r tamanho n+1, poi s na ul ti ma
11 pos i c ao e armazenado o n umero de i t e r a c o e s at i ngi do
12 n : n umero de equa c oes do s i s t ema
13 t o l : c r i t e r i o de parada , ou t o l e r a nc i a
14 max: n umero maximo de i t e r a c o e s
15 /
16 voi d j ac obi ( doubl e matri z , doubl e s ol ucao , i nt n , doubl e t ol , i nt max) {
17 doubl e s ol uc aoAnt er i or [ n ] , ea = 100 , soma=0;
18 i nt cont = 1;
19 // r e a l i z a chute i n i c i a l como x [ i ] = b [ i ] / a [ i ] [ i ]
20 f o r ( i nt i =0; i <n ; i ++){
21 s ol uc aoAnt e r i or [ i ] = matri z [ i ] [ n1]/ matri z [ i ] [ i ] ;
22 }
23 whi l e ( cont < max && ea > t o l ) {
24 f o r ( i nt i =0; i <n ; i ++){
25 soma = 0;
26 f o r ( i nt j =0; j <i ; j ++){
27 soma += matri z [ i ] [ j ] s ol uc aoAnt e r i or [ j ] ;
28 }
29 f o r ( i nt j=i +1; j <n ; j ++){
30 soma += matri z [ i ] [ j ] s ol uc aoAnt e r i or [ j ] ;
31 }
32 s ol ucao [ i ] = ( matri z [ i ] [ n ] soma) / matri z [ i ] [ i ] ;
33 }
34 ea = e r r oRe l at i vo ( sol ucao , s ol ucaoAnt er i or , n) ;
35 f o r ( i nt i =0; i <n ; i ++){
36 s ol uc aoAnt e r i or [ i ] = s ol ucao [ i ] ;
37 }
38 cont++;
39 }
40 //armazena o n umero de i t e r a c o e s na ul ti ma pos i c ao do vet or s ol u c ao
41 s ol ucao [ n ] = cont ;
42 }
43 /
44 Metodo de GaussSe i de l para Resol u cao de SELAS
45 Entradas :
5 Consideracoes Finais 22
46 matri z : matri z ampl i ada do s i s t ema
47 s ol ucao : vet or onde s e r a armazenado o vet or s ol u c ao
48 obs . : e s t e vet or deve pos s ui r tamanho n+1, poi s na ul ti ma
49 pos i c ao e armazenado o n umero de i t e r a c o e s at i ngi do
50 n : n umero de equa c oes do s i s t ema
51 t o l : c r i t e r i o de parada , ou t o l e r a nc i a
52 max: n umero maximo de i t e r a c o e s
53 /
54 voi d gaus s Se i de l ( doubl e matri z , doubl e s ol ucao , i nt n , doubl e t ol , i nt max) {
55 doubl e s ol uc aoAnt er i or [ n ] , ea = 100 , soma=0;
56 i nt cont = 1;
57 // r e a l i z a chute i n i c i a l como x [ i ] = b [ i ] / a [ i ] [ i ]
58 f o r ( i nt i =0; i <n ; i ++){
59 s ol uc aoAnt e r i or [ i ] = matri z [ i ] [ n1]/ matri z [ i ] [ i ] ;
60 }
61 whi l e ( cont < max && ea > t o l ) {
62 f o r ( i nt i =0; i <n ; i ++){
63 soma = 0;
64 f o r ( i nt j =0; j <i ; j ++){
65 soma += matri z [ i ] [ j ] s ol ucao [ j ] ;
66 }
67 f o r ( i nt j=i +1; j <n ; j ++){
68 soma += matri z [ i ] [ j ] s ol uc aoAnt e r i or [ j ] ;
69 }
70 s ol ucao [ i ] = ( matri z [ i ] [ n ] soma) / matri z [ i ] [ i ] ;
71 }
72 ea = e r r oRe l at i vo ( sol ucao , s ol ucaoAnt er i or , n) ;
73 f o r ( i nt i =0; i <n ; i ++){
74 s ol uc aoAnt e r i or [ i ] = s ol ucao [ i ] ;
75 }
76 cont++;
77 }
78 //armazena o n umero de i t e r a c o e s na ul ti ma pos i c ao do vet or s ol u c ao
79 s ol ucao [ n ] = cont ;
80 }
81 /
82 Metodo de GaussSe i de l com s obr e /subr el axac ao para Resol u c ao de SELAS
83 Entradas :
84 matri z : matri z ampl i ada do s i s t ema
85 s ol ucao : vet or onde s e r a armazenado o vet or s ol u c ao
86 obs . : e s t e vet or deve pos s ui r tamanho n+1, poi s na ul ti ma
87 pos i c ao e armazenado o n umero de i t e r a c o e s at i ngi do
88 n : n umero de equa c oes do s i s t ema
89 t o l : c r i t e r i o de parada , ou t o l e r a nc i a
90 max: n umero maximo de i t e r a c o e s
91 w: peso de r el axa c ao e recomendado que e s t e j a ent r e 0 e 2
92 /
93 voi d gaussSei del SOR ( doubl e matri z , doubl e s ol ucao , i nt n , doubl e t ol , i nt max,
doubl e w) {
94 doubl e s ol uc aoAnt er i or [ n ] , ea = 100 , soma=0;
95 i nt cont = 1;
96 // r e a l i z a chute i n i c i a l como x [ i ] = b [ i ] / a [ i ] [ i ]
97 f o r ( i nt i =0; i <n ; i ++){
98 s ol uc aoAnt e r i or [ i ] = matri z [ i ] [ n1]/ matri z [ i ] [ i ] ;
99 }
100 whi l e ( cont < max && ea > t o l ) {
101 f o r ( i nt i =0; i <n ; i ++){
102 soma = 0;
103 f o r ( i nt j =0; j <i ; j ++){
104 soma += matri z [ i ] [ j ] s ol ucao [ j ] ;
105 }
106 f o r ( i nt j=i +1; j <n ; j ++){
107 soma += matri z [ i ] [ j ] s ol uc aoAnt e r i or [ j ] ;
5 Consideracoes Finais 23
108 }
109 s ol ucao [ i ] = (1w) s ol uc aoAnt e r i or [ i ] +(w( matri z [ i ] [ n ] soma) ) / matri z [ i ] [ i
] ;
110 }
111 ea = e r r oRe l at i vo ( sol ucao , s ol ucaoAnt er i or , n) ;
112 f o r ( i nt i =0; i <n ; i ++){
113 s ol uc aoAnt e r i or [ i ] = s ol ucao [ i ] ;
114 }
115 cont++;
116 }
117 //armazena o n umero de i t e r a c o e s na ul ti ma pos i c ao do vet or s ol u c ao
118 s ol ucao [ n ] = cont ;
119 }
Fun coes Auxiliares
1 #i nc l ude <i ostream>
2 #i nc l ude <cmath>
3
4 #i nc l ude a u x i l i a r e s . h
5
6 us i ng namespace std ;
7 /
8 Gera uma matri z de Hi l be r t de ordem n
9 onde h [ i ] [ j ] = 1/( i+j +1)
10 Entradas :
11 matri z : matri z onde s e r a armazenada a matri z de
12 de Hi l be r t
13 ordem : ordem da matri z
14 /
15 voi d mat r i z Hi l be r t ( doubl e matri z , i nt ordem) {
16 f o r ( i nt i =0; i <ordem ; i ++){
17 matri z [ i ] [ ordem ] = 0;
18 f o r ( i nt j =0; j <ordem ; j ++){
19 matri z [ i ] [ j ] = 1. 0/( i+j +1. 0) ;
20 matri z [ i ] [ ordem]+= matri z [ i ] [ j ] ;
21 }
22 }
23 }
24 /
25 Gera uma matri z I dent i dade de ordem n
26 Entradas :
27 matri z : matri z onde s e r a armazenada a matri z
28 ordem : ordem da matri z
29 /
30 voi d mat r i zI dent i dade ( doubl e matri z , i nt n) {
31 f o r ( i nt i =0; i <n ; i ++){
32 col unaI dent i dade ( matri z [ i ] , i , n) ;
33 }
34 }
35 /
36 Gera uma col una da matri z i dent i dade de ordem n
37 Entradas :
38 vet or : vet or onde s e r a armazenada a col una
39 da matri z
40 ordem : ordem da matri z
41 /
42 voi d col unaI dent i dade ( doubl e vetor , i nt c , i nt n) {
43 i nt i ;
44 f o r ( i =0; i <n ; i ++){
45 vet or [ i ] = 0;
46 }
5 Consideracoes Finais 24
47 vet or [ c ] = 1;
48 }
49 /
50 Gera uma matri z de exemplo para r e s ol u c ao de SELAS
51 Entradas :
52 matri z : matri z onde s e r a armazenada a matri z
53 ampl i ada do s i s t ema
54 /
55 voi d matrizExemplo ( doubl e matri z ) {
56 matri z [ 0 ] [ 0 ] = 6;
57 matri z [ 0 ] [ 1 ] = 1;
58 matri z [ 0 ] [ 2 ] = 3;
59 matri z [ 0 ] [ 3 ] = 13;
60 matri z [ 1 ] [ 0 ] = 1;
61 matri z [ 1 ] [ 1 ] = 3;
62 matri z [ 1 ] [ 2 ] = 1;
63 matri z [ 1 ] [ 3 ] = 10;
64 matri z [ 2 ] [ 0 ] = 3;
65 matri z [ 2 ] [ 1 ] = 1;
66 matri z [ 2 ] [ 2 ] = 5;
67 matri z [ 2 ] [ 3 ] = 16;
68 }
69 /
70 Gera uma matri z de exemplo para r e s ol u c ao de SELAS
71 Entradas :
72 matri z : matri z onde s e r a armazenada a matri z
73 ampl i ada do s i s t ema
74 /
75 voi d matrizExemplo2 ( doubl e matri z ) {
76 matri z [ 0 ] [ 0 ] = 1;
77 matri z [ 0 ] [ 1 ] = 1;
78 matri z [ 0 ] [ 2 ] = 0;
79 matri z [ 0 ] [ 3 ] = 3;
80 matri z [ 1 ] [ 0 ] = 2;
81 matri z [ 1 ] [ 1 ] = 1;
82 matri z [ 1 ] [ 2 ] = 1;
83 matri z [ 1 ] [ 3 ] = 1;
84 matri z [ 2 ] [ 0 ] = 3;
85 matri z [ 2 ] [ 1 ] = 1;
86 matri z [ 2 ] [ 2 ] = 1;
87 matri z [ 2 ] [ 3 ] = 2;
88 matri z [ 3 ] [ 0 ] = 1;
89 matri z [ 3 ] [ 1 ] = 2;
90 matri z [ 3 ] [ 2 ] = 3;
91 matri z [ 3 ] [ 3 ] = 1;
92 }
93 /
94 Gera uma matri z de exemplo para i nve r s ao de
95 mat r i zes
96 Entradas :
97 matri z : matri z onde s e r a armazenada a matri z
98 /
99 voi d matrizExemplo4 ( doubl e matri z ) {
100 matri z [ 0 ] [ 0 ] = 1;
101 matri z [ 0 ] [ 1 ] = 4;
102 matri z [ 0 ] [ 2 ] = 9;
103 matri z [ 0 ] [ 3 ] = 16;
104 matri z [ 1 ] [ 0 ] = 4;
105 matri z [ 1 ] [ 1 ] = 9;
106 matri z [ 1 ] [ 2 ] = 16;
107 matri z [ 1 ] [ 3 ] = 25;
108 matri z [ 2 ] [ 0 ] = 9;
109 matri z [ 2 ] [ 1 ] = 16;
5 Consideracoes Finais 25
110 matri z [ 2 ] [ 2 ] = 25;
111 matri z [ 2 ] [ 3 ] = 36;
112 matri z [ 3 ] [ 0 ] = 16;
113 matri z [ 3 ] [ 1 ] = 25;
114 matri z [ 3 ] [ 2 ] = 36;
115 matri z [ 3 ] [ 3 ] = 49;
116
117
118 }
119 /
120 Gera uma matri z de exemplo para i nve r s ao de
121 mat r i zes
122 Entradas :
123 matri z : matri z onde s e r a armazenada a matri z
124 /
125 voi d matrizExemplo5 ( doubl e matri z ) {
126 matri z [ 0 ] [ 0 ] = 10;
127 matri z [ 0 ] [ 1 ] = 2;
128 matri z [ 0 ] [ 2 ] = 1;
129 matri z [ 1 ] [ 0 ] = 3;
130 matri z [ 1 ] [ 1 ] = 6;
131 matri z [ 1 ] [ 2 ] = 2;
132 matri z [ 2 ] [ 0 ] = 1;
133 matri z [ 2 ] [ 1 ] = 1;
134 matri z [ 2 ] [ 2 ] = 5;
135 }
136 /
137 Cal cul a o e r r o r e l a t i v o ent r e doi s vet or es ,
138 consi der ando que s ol u c ao exata era o vet or
139 ( 1 , 1 , . . . , 1 )
140 Entradas :
141 s ol ucao : s ol ucao encontrada
142 n : ordem do s i s t ema
143 Sa da : Erro r e l a t i v o per cent ual
144 /
145 doubl e e r r oHi l be r t ( doubl e sol ucao , i nt n) {
146 doubl e maior = 0 , e r r o I ;
147 f o r ( i nt i =0; i <n ; i ++){
148 e r r o I = f abs (1s ol ucao [ i ] ) ;
149 i f ( er r oI >mai or ) {
150 maior = e r r o I ;
151 }
152 }
153 r et ur n mai or 100;
154 }
155 /
156 Cal cul a o e r r o r e l a t i v o ent r e doi s ve t or e s
157 Entradas :
158 x0 : s ol u c ao encontrada
159 x1 : s ol u c ao exata
160 n : ordem do s i s t ema
161 Sa da : Erro r e l a t i v o per cent ual
162 /
163 doubl e e r r oRe l at i vo ( doubl e x0 , doubl e x1 , i nt n) {
164 doubl e mai or = 0 , e r r o I ;
165 f o r ( i nt i =0; i <n ; i ++){
166 e r r o I = f abs ( ( x1 [ i ]x0 [ i ] ) /( x1 [ i ] ) ) ;
167 i f ( er r oI >mai or ) {
168 maior = e r r o I ;
169 }
170 }
171 r et ur n mai or 100;
172 }
5 Consideracoes Finais 26
173 /
174 Exi be uma matri z na s a da padr ao
175 Entradas :
176 matri z : matri z a s e r e xi bi da
177 n : n umero de l i nhas
178 m: n umero de col unas
179 /
180 voi d e xi bi r Mat r i z ( doubl e matri z , i nt n , i nt m) {
181 f o r ( i nt i =0; i <n ; i ++){
182 cout << | ;
183 f o r ( i nt j =0; j <m; j ++){
184 cout << matri z [ i ] [ j ] << ;
185 }
186 cout << | \ n ;
187 }
188 }
189 /
190 Exi be uma matri z na s a da padr ao ut i l i z a ndo
191 ender e cos v i r t ua i s de col unas
192 Entradas :
193 matri z : matri z a s e r e xi bi da
194 c ol : vet or contendo endere co v i r t ua l de col unas
195 n : n umero de l i nhas
196 m: n umero de col unas
197 /
198 voi d exi bi r Mat r i z Col ( doubl e matri z , i nt col , i nt n , i nt m) {
199 f o r ( i nt i =0; i <n ; i ++){
200 cout << | ;
201 f o r ( i nt j =0; j <m; j ++){
202 cout << matri z [ i ] [ c ol [ j ] ] << ;
203 }
204 cout << | \ n ;
205 }
206 cout << << endl ;
207 }
208 /
209 Exi be um vet or na s a da padr ao
210 Entradas :
211 v : vet or a s e r exi bi do
212 n : n umero de el ementos
213 /
214 voi d e xi bi r Ve t or ( doubl e v , i nt n) {
215 f o r ( i nt i =0; i <n ; i ++){
216 cout << | << v [ i ] << | << endl ;
217 }
218 }
219 /
220 Exi be um vet or na s a da padr ao ut i l i z a ndo
221 ender e cos v i r t ua i s de col unas
222 Entradas :
223 v : vet or a s e r exi bi do
224 c ol : vet or contendo endere co v i r t ua l
225 de col unas
226 n : n umero de el ementos
227 /
228 voi d exi bi r Vet or Col ( doubl e v , i nt col , i nt n) {
229 f o r ( i nt i =0; i <n ; i ++){
230 cout << | << v [ c ol [ i ] ] << | << endl ;
231 }
232 }
233 /
234 Real i za a subt ra c ao de duas mat r i zes
235 quadradas
5 Consideracoes Finais 27
236 Entradas :
237 a : matri z a que guardar a o val or ab
238 b : matri z a s e r s ubt r a da de a
239 n : ordem da matri z
240 /
241 voi d s ubt r ai r Mat r i z ( doubl e a , doubl e b , i nt n) {
242 f o r ( i nt i =0; i <n ; i ++){
243 f o r ( i nt j =0; j <n ; j ++){
244 a [ i ] [ j ] =b [ i ] [ j ] ;
245 }
246 }
247 }
248 /
249 Norma do m aximo para uma matri z quadrada
250 Entradas :
251 matri z : matri z a s e r c al c ul ada
252 n : ordem da matri z
253 Sa da : val or encontrado
254 /
255 doubl e normaMatriz ( doubl e matri z , i nt n) {
256 doubl e maior =0, soma ;
257 f o r ( i nt i =0; i <n ; i ++){
258 soma = 0;
259 f o r ( i nt j =0; j <n ; j ++){
260 soma += f abs ( matri z [ i ] [ j ] ) ;
261 }
262 i f ( soma > mai or ) {
263 maior = soma ;
264 }
265 }
266 r et ur n mai or ;
267 }
268 /
269 Real i za a mul t i pl i c a c ao de duas mat r i zes
270 quadradas
271 Entradas :
272 a : matri z a s e r mul t i pl i c ada
273 b : matri z a s e r mul t i pl i c ada
274 c : matri z que guardar a o r e s ul t ado de ab
275 n : ordem da matri z
276 /
277 voi d mul t i pl i c aMat r i z ( doubl e a , doubl e b , doubl e c , i nt n) {
278 t r ans pos t a ( b , n) ;
279 f o r ( i nt i =0; i <n ; i ++){
280 f o r ( i nt j =0; j <n ; j ++){
281 c [ i ] [ j ] = produt oI nt erno ( a [ i ] , b [ j ] , n) ;
282 }
283 }
284 }
285 /
286 Cal cul a o produto e s c a l a r de doi s ve t or e s
287 Entradas :
288 a : vet or a s e r mul t i pl i c ada
289 b : vet or a s e r mul t i pl i c ada
290 n : n umero de el ementos
291 Sa da : Produto e s c a l a r <a , b>
292 /
293 doubl e pr odut oI nt erno ( doubl e a , doubl e b , i nt n) {
294 doubl e soma=0;
295 f o r ( i nt i =0; i <n ; i ++){
296 soma += a [ i ] b [ i ] ;
297 }
298 r et ur n soma ;
5 Consideracoes Finais 28
299 }
300 /
301 Cal cul a a t r ans pos t a de uma matri z quadrada
302 Entradas :
303 matri z : matri z a s e r t r ans pos t a
304 n : ordem da matri z
305 /
306 voi d t r ans pos t a ( doubl e matri z , i nt n) {
307 doubl e temp ;
308 i nt i , j ;
309 f o r ( i =0; i <n ; i ++){
310 f o r ( j=i ; j <n ; j ++){
311 temp = matri z [ j ] [ i ] ;
312 matri z [ j ] [ i ] = matri z [ i ] [ j ] ;
313 matri z [ i ] [ j ] = temp ;
314 }
315 }
316 }
317 /
318 Exi be uma matri z no padr ao do LateX
319 Entradas :
320 matri z : matri z a s e r e xi bi da
321 n : ordem da matri z
322 /
323 voi d exi bi rMat ri zLat eX ( doubl e matri z , i nt n) {
324 cout . s e t f ( std : : i o s : : f i xed , std : : i o s : : f l o a t f i e l d ) ;
325 cout . pr e c i s i o n ( 10) ;
326 cout << \\[ \n ;
327 cout << \\ pmatri x{\n ;
328 f o r ( i nt i = 0; i < n ; i ++){
329 f o r ( i nt j =0; j <n ; j ++){
330 i f ( j > 0) {
331 cout << & ;
332 }
333 cout << matri z [ i ] [ j ] ;
334 }
335 cout << \\ cr \n ;
336 }
337 cout << }\n\\] \n ;
338 }

Potrebbero piacerti anche