Exercícios sobre matrizes
21 de outubro de 2011
Esta lista contém exercícios sobre matrizes. Ela propõe que você implemente uma função para calcular o determinante de uma matrizn x n. O valornserá uma constante definida, por exemplo, como
#define n 10
ou
const int n = 10;
Compilando o programa com valores distintos paranvocê poderá testar o seu programa em diversos casos. (Este não é o modo ideal de lidar com matrizes, mas é o mais simples neste estágio do curso.)
O cálculo do determinante é baseado nas seguintes observações
• Se “a parte de baixo” de uma matrizAfor nula, isto é, seai j=0 parai>j, então o determinante deAé o produto dos elementos da diagonal: detA=∏ni=1aii.
• Se trocarmos duas linhas deAentão o seu determinante muda de sinal, mas o módulo do determinante não muda.
• Se subtrairmos de um linha deAum múltiplo da primeira linha então o determi- nante não se altera.
Isto leva às seguintes tarefas:
Tarefa 1) Escreva uma função
void troqueLinhas(double matriz[n][n], int i, int j) que troca as linhasiejdamatrizdada.
Tarefa 2) Escreva uma função
void combineLinhas(double matriz[n][n], int i, int j, double alpha)
1
que transformai-ésima linha da matriz nesta linha menosalphavezes aj-ésima linha.
Tarefa 3) Escreva uma função
int elimineAParteDeBaixo(double matriz[n][n]),
que combina e permuta as linhas damatrizdada de modo a zerar os elementos ai jcomi> j, e retorna o número de permutações. Para cadai=0...n - 2esta função deve encontrarjentreiental que matriz[j][i]tem o maior valor absoluto. Sejfor diferente deientão a função deve permutar as linhasiej. A seguir, sematriz[i][i]for diferente de zero, a função deve tomar
alpha = matriz[j][i] / matriz[i][i]
e subtrair alpha vezes a primeira linha dajésima linha. (Pense um pouco e veja que, de fato, o processo acima leva à uma matriz com entradas nulas abaixo da diagonal.)
Tarefa 4) Escreva a função
double determinante(double matriz[n][n])
que retorna o determinante damatrizdada a partir da função da Tarefa 3 e as observações acima.
Para testar o seu cálculo do determinante, faça os seguinte:
Teste 1) Verifique que se amatrizé diagonal então a sua função diz que o determinante dela é o produto dos elementos da diagonal (faça alguns testes colocando zeros na diagonal também, só para ter certeza que a sua função não tenta dividir por zero.)
Teste 2) Gere algumas matrizesMe númerosalphae, para todo par(i,j), verifique que a sua funçãodeterminantecalcula o mesmo valor para cadaMe a matrizM’, obtida ao subtrairalphavezes ai-ésima linha deMdaj-ésima linha deM.