Podemos ver que um termo usa o outro pra ser definido (l usa d e vice versa). Por isso tem uma ordem para fazer: d11, l21, l31, d22, l32, d33 (num exemplo de matriz de ordem 3). A ordem é essa porque fazendo o d11 (esse é o primeiro em matriz de qualquer ordem) é possível descobrir todos os l da primeira coluna (ou seja, abaixo do índice 11, já que a matriz é triangular inferior e unitária). Após descobrir todos esses, com o d22 dá pra descobrir todos os l abaixo de 22 e por aí vai.
Mostrando postagens com marcador matriz. Mostrar todas as postagens
Mostrando postagens com marcador matriz. Mostrar todas as postagens
sexta-feira, 26 de julho de 2013
Decomposição por LDLT
Seja A uma matriz simétrica. Podemos decompor A pelo produto de 3 outras matrizes a saber. L é uma matriz triangular inferior e unitária e D é uma matriz diagonal. A solução é: [Ly = b; Dt = y; LTx = t] para
.
Podemos ver que um termo usa o outro pra ser definido (l usa d e vice versa). Por isso tem uma ordem para fazer: d11, l21, l31, d22, l32, d33 (num exemplo de matriz de ordem 3). A ordem é essa porque fazendo o d11 (esse é o primeiro em matriz de qualquer ordem) é possível descobrir todos os l da primeira coluna (ou seja, abaixo do índice 11, já que a matriz é triangular inferior e unitária). Após descobrir todos esses, com o d22 dá pra descobrir todos os l abaixo de 22 e por aí vai.
Podemos ver que um termo usa o outro pra ser definido (l usa d e vice versa). Por isso tem uma ordem para fazer: d11, l21, l31, d22, l32, d33 (num exemplo de matriz de ordem 3). A ordem é essa porque fazendo o d11 (esse é o primeiro em matriz de qualquer ordem) é possível descobrir todos os l da primeira coluna (ou seja, abaixo do índice 11, já que a matriz é triangular inferior e unitária). Após descobrir todos esses, com o d22 dá pra descobrir todos os l abaixo de 22 e por aí vai.
segunda-feira, 13 de maio de 2013
Decomposição pelo método de Cholesky (LLT)
Seja A uma matriz simétrica e definida positiva (ou seja, para a determinante de A - λI todos os λ devem ser maiores que 0)(ou seja, mais fácil ainda: é simétrica e tem a diagonal principal toda positiva). Podemos decompor A por um produto de duas outras matrizes (L e a transposta de L), em que L é triangular inferior e LT é triangular superior. Para obter L, realizamos as seguintes operações:
Feito isso, temos as duas matrizes. IMPORTANTE: a conta é feita coluna por coluna, não adianta tentar começar pela diagonal que não vai dar. Agora um exemplo, de praxe:
Lindo (só que não)! Agora só falta resolver o sisteminha em vermelho aí em cima. Vão dar números horrorosos, então é bacana cortar com 4 casas decimais. Não pretendo resolver, preguiça.
Feito isso, temos as duas matrizes. IMPORTANTE: a conta é feita coluna por coluna, não adianta tentar começar pela diagonal que não vai dar. Agora um exemplo, de praxe:
Lindo (só que não)! Agora só falta resolver o sisteminha em vermelho aí em cima. Vão dar números horrorosos, então é bacana cortar com 4 casas decimais. Não pretendo resolver, preguiça.
Decomposição LU com pivotação parcial
A pivotação parcial é como se fosse uma 'extensão' do método LU. Existe pra lidar com o pivô nulo. Caso o pivô seja 0, tem que trocar as linhas E o termo independente do resultado do sistema linear que gerou a matriz A. O pivô deve ser o maior número EM MÓDULO da coluna (independentemente do primeiro elemento ser 0). Pra lidar com essa troca de forma facilitada, trabalha-se com uma matriz permutação P, do tipo identidade. A cada troca efetuada no dispositivo prático, troca-se também a ordem das linhas da matriz P e dos multiplicadores e o resultado de LU passa a ser PA, e não apenas A. Vamos ao desenho de exemplo:
Agora resta só montar as matrizes L e U e resolver o sistema:
Agora resta só montar as matrizes L e U e resolver o sistema:
sábado, 6 de abril de 2013
Vetores
Vetores
são
como
as
variáveis
normais,
só
que
um
vetor
pode
guardar
mais
de
um
valor
ao
mesmo
tempo.
Imagina
um
vetor
como
uma
caixinha
com
várias
divisões,
e
cada
divisão
equivaleria
a
uma
variável
normal.
Tanto
que
tudo
parece
com
o
normal,
a
declaração,
a
atribuição
de
valores
e
tal.
int
i,
vetor[5];
Pronto,
declarei
um
vetor
de
5
posições.
Em
C
a
gente
TEM
que
colocar
quantas
posições
esse
vetor
vai
ter
na
declaração
dele.
OBSERVAÇÃO
IMPORTANTE:
num
vetor
de
x
posições,
os
índices
vão
de
0
a
x-1.
Portanto,
no
meu
vetorzinho
de
5
posições
eu
tenho
0,
1,
2,
3
e
4
como
índices.
E
quando
a
gente
declara,
todas
essas
posições
são
iniciadas
com
valores
aleatórios.
Por
isso,
antes
de
usar
seu
vetor
(ou
qualquer
variável)
sempre
inicialize,
senão
vai
dar
lixo.
Pra
atribuir
um
valor
a
uma
posição
do
vetor
é
só
colocar
qual
posição
eu
quero
e
atribuir.
TARAAAN!
Tipo
vetor[0]
=
18;
Taí,
a
primeira
posição
do
meu
vetor
tem
o
valor
18
guardado.
A
gente
também
pode
atribuir
valores
direto
na
declaração,
assim:
int
vetor[5]
=
{18,
14,
9,
5,
44};
Dessa
forma
nosso
vetor
já
não
vem
mais
com
lixo,
já
vem
com
esses
valores.
Se
eu
declarar
um
vetor
de
5
posições
e
declarar
só
3
delas
desse
jeito,
por
exemplo,
as
outras
automaticamente
são
declaradas
com
0.
Uma
matriz
é
um
vetor
cujas
posições
contêm
outros
vetores.
A
declaração
é
igual
à
do
vetor:
int
matriz[5][3];
em
que
cada
uma
das
5
posições
tem
um
vetor
de
3
posições.
Tipo
isso.
Dá
até
pra
desenhar,
fica
assim:
[
][
][
][
][
]
[
][
][
][
][
]
[
][
][
][
][
]
A
gente
pode
fazer
vetores
de
múltiplas
dimensões
(sério,
quantas
a
gente
quiser),
mas
fica
meio
difícil
de
ver
então
é
melhor
com
no
máximo
3
mesmo.
Pra inicializar uma matriz seria bem
Marcadores:
1º período,
c,
matriz,
matrizes,
pc,
pc-i,
programação,
vetor,
vetores
Assinar:
Postagens (Atom)



