• Nenhum resultado encontrado

MAC 300 M´etodos Num´ericos da ´Algebra Linear Exerc´ıcio Programa 1 Fatora¸c˜ao QR e LQ

N/A
N/A
Protected

Academic year: 2022

Share "MAC 300 M´etodos Num´ericos da ´Algebra Linear Exerc´ıcio Programa 1 Fatora¸c˜ao QR e LQ"

Copied!
3
0
0

Texto

(1)

MAC 300 M´etodos Num´ericos da ´ Algebra Linear Exerc´ıcio Programa 1

Fatora¸c˜ ao QR e LQ

30 de agosto de 2006

Este primeiro exerc´ıcio programa est´a dividido em quatro partes:

1. Implementa¸c˜ao de diferentes formas de cˆomputo da fatora¸c˜ao QR e LQ;

2. Compara¸c˜ao dos tempos de algoritmos orientados para linhas e colunas;

3. Resolu¸c˜ao de sistemas lineares usando a fatora¸c˜ao QR e LQ;

4. Experimentos para estudo da estabilidade na fatora¸c˜ao.

Os programas devem ser escritos em C.

1 Fatora¸ c˜ ao LQ

Como vimos em sala, o algoritmo de Gram-Schmidt modificado acessa as ma- trizes envolvidas por linhas. Isso n˜ao ´e bom quando usamos um programa em C que armazena as matrizes por colunas. Existem variantes do algoritmo de fatora¸c˜ao QR que s˜ao organizadas de modo a permitir o acesso das matrizes por linhas e portanto s˜ao melhores para a linguagem C.

Uma forma simples de contornar o problema ´e pensar em uma outra fatora¸c˜ao de matrizes, a fatora¸c˜ao A=LQ, onde a matrizQ´e mais uma vez unit´aria e suas linhas geram os espa¸cos gerados pelas linhas da matriz A. J´a a matriz L ´e triangular inferior e apresenta as coordenas das linhas de A nas bases associadas as linhas deQ. O processo de dedu¸c˜ao do algoritmo para cˆomputo desta fatora¸c˜ao ´e idˆentico ao processo de dedu¸c˜ao do algoritmo de fatora¸c˜ao QR, s´o que com as linhas deAcomo foco. Desta forma n˜ao ´e de se estranhar que tal op¸c˜ao gere um algoritmo que acessa as matrizes por linhas e que ent˜ao

´e melhor adaptado para ser implementado em C.

1

(2)

2 Implementa¸ c˜ ao

Primeiro vocˆe deve implementar as diferentes estrat´egias de fatora¸c˜ao de matri- zes quadradas como fun¸c˜oes:

• void clGSQR(int m, double A[][MAX], double Q[][MAX],

double R[][MAX]): recebe uma matriz A∈Rm×m, e calcula a fatora¸c˜ao QR reduzida usando o m´etodo de Gram-Schmidt cl´assico. O resultado ´e devolvido emQeR.

• void modGSQR(int m, double A[][MAX], double Q[][MAX],

double R[][MAX]): semelhante `a fun¸c˜ao anterior, por´em usando Gram- Schmidt modificado.

• void modGSLQ(int m, double A[][MAX], double L[][MAX],

double Q[][MAX]): semelhante `a fun¸c˜ao anterior, por´em baseando-se na decomposi¸c˜ao LQ da matrix.

Note que durante o processo de fatora¸c˜ao pode-se descobrir que a matriz n˜ao tem posto m´aximo ou est´a muito pr´oximo disso. Por exemplo, nos algoritmos baseados em Gram-Schmidt, ap´os retirar de aj as componentes nas dire¸c˜oes qi anteriores, pode-se obter um vj muito pr´oximo de zero. Nesse caso seria interessante parar o processo, ou pelo menos avisar o usu´ario. Isto poderia ser feito usando um valor de retorno. N˜ao vamos nos preocupar com isso nesse EP.

3 Resolu¸ c˜ ao de sistemas

Implemente a id´eia apresentada no final da Palestra 7 do livro texto:

• void linsistQR(int m, double Q[][MAX], double R[][MAX], double b[], double x[]): fun¸c˜ao que aproveita a fatora¸c˜ao QR de uma matrizA∈Rm×mpara resolver o sistema linearAx=b.

• void linsistLQ(int m, double L[][MAX], double Q[][MAX], double b[], double x[]): fun¸c˜ao que aproveita a fatora¸c˜ao LQ de uma matrizA∈Rm×mpara resolver o sistema linearAx=b.

As rotinas descritas nos itens 2 e 3 devem ser implementadas em um ´unico arquivo chamadoqr.c. J´a o arquivoqr.hdeve possuir os prot´otipos acima e a defini¸c˜ao da constante MAX. Durante a implementa¸c˜ao pode ser que vocˆe note que ´e interessante disponibilizar algumas rotinas de manipula¸c˜ao de matrizes e vetores para uso na pr´oxima etapa ou mesmo em EPs futuros. Exemplos t´ıpicos s˜ao fun¸c˜oes para multiplica¸c˜ao de matriz por vetor ou para c´alculo de produto interno entre dois vetores. Agrupe estas rotinas em um m´odulo chamadolinalg (com os respectivos .ce .h). A manuten¸c˜ao destas conven¸c˜oes ´e importante, pois possivelmente as rotinas descritas acima ser˜ao testadas por programas principais nossos.

2

(3)

4 Testes

Crie uma fun¸c˜ao principal de teste para seu programa que execute as seguintes tarefas:

Teste de Desempenho

Gere matrizes quadradas de dimens˜ao crescente m = 100,200,300, ...,1000 e imprima o tempo gasto para fatorar as matrizes usando as rotinas modGSQR e modGSLQ. No relat´orio escreva um texto descrevendo os resultados e comentando- os.

Teste de Estabilidade

Ela deve ler os arquivos teste2.dat-teste101.dat que possuem matrizes de R50×50 com n´umeros de condi¸c˜ao crescente. Os formatos destes arquivos s˜ao facilmente deduz´ıveis.

Para cada uma dessas matrizes, que vamos denotar por A, vocˆe deve:

1. Computar sua fatora¸c˜ao QR e LQ com os trˆes m´etodos;

2. Imprimir uma linha na sa´ıda padr˜ao com os trˆes valores dekQQ−IkF . Isto mede o qu˜ao ortogonais s˜ao realmente as matrizesQcalculadas.

3. Resolver sistema:

Ax= 1,

no qual o 1 denota o vetor de uns, usando as trˆes fatora¸c˜oes, usando a rotina adequada.

4. Imprimir uma linha na sa´ıda padr˜ao com os trˆes valores kAx−1k2, que medem res´ıduo das solu¸c˜oes calculadas.

5. Usando a sa´ıda do programa decidir qual dos m´etodos para obter a fatora¸c˜ao QR parece mais adequado. Escreva um pequeno texto justificando a sua escolha. Inclua no texto gr´aficos que resumam a sa´ıda de seu programa.

Os n´umeros de condi¸c˜ao de cada um dos 100 testes est´a no arquivocondicao.dat.

5 Observa¸ c˜ oes Finais

Por favor,

• Documente corretamente todas as fun¸c˜oes do seu programa.

• Crie um README contendo o explica¸c˜oes sobre o funcionamento do programa, bem como as suas limita¸c˜oes e seus “bugs”. Esse arquivo ser´a usado para a corre¸c˜ao e poderia trazer dicas do tipo “n˜ao deu para fazer isso. . . ” ou “a rotina zzz est´a com problemas. . . ” Vocˆe tamb´em pode por essas informa¸c˜oes em uma se¸c˜ao do relat´orio.

3

Referências

Documentos relacionados

rgeom(n, p) distribui¸ c˜ ao Geom´ etrica(p) runif(n, a, b) distribui¸ c˜ ao Uniforme(a,b) rexp(n, lambda) distribui¸ c˜ ao Exponencial(lambda) rnorm(n, mean, sd) distribui¸ c˜

Se sua ponta¸ c˜ ao corrente for menor que o teto, ele pede mais uma carta; caso contr´ ario, ele diz ` a banca que n˜ ao quer mais nenhuma carta e, caso o jogador n˜ ao

J´ a que ´ e veross´ımil que os parˆ ametros de consumo individual s˜ ao diferentes, ent˜ ao qualquer tentat´ıva de relatar o consumo agregado ` a salario agregado (por exemplo)

Se vocˆe escreve um programa servidor usando a API de sockets e executa ele, mesmo sem ter nenhum cliente. conectado, a porta utilizada pelo servidor tem que aparecer na sa´ıda

[Fa¸ ca algumas r´ eplicas (n˜ ao muitas) da sua si- mula¸c˜ ao da cadeia para verificar se h´ a altera¸ c˜ oes significativas nos valores das frequencias relativas... Seleciona-se

Para evitar isso, vocˆ e pode mover os dois comandos do preˆ ambulo para algum lugar ap´ os o comando \tableofcontents ou definitivamente n˜ ao us´ a-los, porque vocˆ e ver´ a que

Vocˆ e pode fazer est´ a quest˜ ao mesmo que n˜ ao tenha escrito a fun¸c˜ ao carregue_mapa() ou a fun¸c˜ ao sokoban_resolvido(). Um exemplo de execu¸c˜ ao do programa est´ a

O coeficiente de correla¸c˜ ao linear varia entre −1 e +1: r = −1 corresponde ao caso de correla¸ c˜ ao linear negativa perfeita e r = +1 corresponde ao de correla¸c˜ ao