Fórum de discussão aberto. Vocês agora podem postar suas dúvidas e questões aqui.
Olá André, estou com um problema no escalonamento. Por algum motivo quando faço o escalonamento da matriz, consigo zerar abaixo da diagonal, porém os outros elementos não são alterados como deveriam.
Nas instruções do EP diz
while Col<n:
laux=Col+1
for lin=laux to n:
substituição apropriada
Nessa substituição eu estou variando um j de 0 a n e alterando o elemento da matriz conforme teoria. Acredito que o problema está em algum dos critérios de início ou parada, mas não consegui resolver.
Obrigada
Nathália
Nas instruções do EP diz
while Col<n:
laux=Col+1
for lin=laux to n:
substituição apropriada
Nessa substituição eu estou variando um j de 0 a n e alterando o elemento da matriz conforme teoria. Acredito que o problema está em algum dos critérios de início ou parada, mas não consegui resolver.
Obrigada
Nathália
Olá, André
no EP o professor pede que testemos o programa utilizando as matrizes de Hilbert para as ordens n=4, 7 e 10. Mas a matriz de Hilbert é uma matriz quadrada, possui o número de linhas igual ao de colunas. Como faremos pra testar se precisamos de uma matriz extendida, do tipo Anx(n+1)?
Obrigado.
Daniel
no EP o professor pede que testemos o programa utilizando as matrizes de Hilbert para as ordens n=4, 7 e 10. Mas a matriz de Hilbert é uma matriz quadrada, possui o número de linhas igual ao de colunas. Como faremos pra testar se precisamos de uma matriz extendida, do tipo Anx(n+1)?
Obrigado.
Daniel
Olá, Daniel. A matriz extendida A é composta por duas partes: uma matriz quadrada, que vamos chamar de H(nxn), e um vetor b(1xn). A matriz A é formada colocando H e b um do lado do outro: A = [H|b]. Em conexão com o sistema linear, o sistema linear que a matriz A representa é Hx = b. Então, vocês devem usar a matriz de Hilbert nxn com n=4,7,10 com uma coluna a mais que é o vetor do lado direito da equação, para uma matriz A(4,5), A(7,8) e A(10,11), respectivamente.
Nathalia: Tem milhares de coisas que podem estar acontecendo com o seu programa. Traga o seu EP em um pen-drive na próxima monitoria e a gente tenta ver o que está acontecendo.
Nathalia: Tem milhares de coisas que podem estar acontecendo com o seu programa. Traga o seu EP em um pen-drive na próxima monitoria e a gente tenta ver o que está acontecendo.
Os itens 2 e 4 diz "Compare as soluções encontradas com a solução exata, estimando o número de dígitos corretos para cada n.". Como eu estimo a solução exata? Eu percebi que os números da solução exata são inteiros, mas como saber qual inteiro?
Outra coisa, o relatório tem caráter de relatório mesmo, ou é para somente enumerar os itens 2, 4 e 5 e respondê-los em um arquivo texto?
Outra coisa, o relatório tem caráter de relatório mesmo, ou é para somente enumerar os itens 2, 4 e 5 e respondê-los em um arquivo texto?
Mais dúvidas, além das anteriores:
1. O EP são dois programas, dois arquivos (no meu caso, .c), um para rodar gauss simples, outro gauss com pivotamento? Ou é um único programa com as duas funções?
2. Sobre "Compare as soluções encontradas com a solução exata, estimando o número de dígitos corretos para cada n." que falei na mensagem anterior, eu descobri que entendi menos ainda do que achava que era. O que exatamente tem que fazer?
3. Posso declarar iflag e n como variáveis globais e não variáveis dentro do main?
Obrigado.
1. O EP são dois programas, dois arquivos (no meu caso, .c), um para rodar gauss simples, outro gauss com pivotamento? Ou é um único programa com as duas funções?
2. Sobre "Compare as soluções encontradas com a solução exata, estimando o número de dígitos corretos para cada n." que falei na mensagem anterior, eu descobri que entendi menos ainda do que achava que era. O que exatamente tem que fazer?
3. Posso declarar iflag e n como variáveis globais e não variáveis dentro do main?
Obrigado.
Olá, Daniel.
1. Um programa com duas funções.
2. Teste seu programa com um sistema para o qual você já sabe a solução. Faça H a matriz de Hilbert e z = (1, 1, 1, ...), e encontre b = Hz. Então resolva o sistema Hx = b - você devia encontrar z, mas vai encontrar um "z com erro".
3. Você pode declarar como globais, mas usar variáveis globais é uma MÁ PRÁTICA de programação. Imagine que em programas grandes, você rapidamente se perde quando precisa lembrar se o n foi usado para alguma ou outra coisa, ou se essa flag significa isso ou aquilo. Então o melhor jeito (e o jeito que ganha mais nota) é usar ponteiros: declare GaussSimple (int n, int * IFLAG...), e no main passe o endereço da variável GaussSimple (n, &IFLAG, ...).
4. Pro "relatório", basta responder as questões, mas contextualize. Responder "1. Sim. 2. Não. 3. São 5" não vai ser aceito.
1. Um programa com duas funções.
2. Teste seu programa com um sistema para o qual você já sabe a solução. Faça H a matriz de Hilbert e z = (1, 1, 1, ...), e encontre b = Hz. Então resolva o sistema Hx = b - você devia encontrar z, mas vai encontrar um "z com erro".
3. Você pode declarar como globais, mas usar variáveis globais é uma MÁ PRÁTICA de programação. Imagine que em programas grandes, você rapidamente se perde quando precisa lembrar se o n foi usado para alguma ou outra coisa, ou se essa flag significa isso ou aquilo. Então o melhor jeito (e o jeito que ganha mais nota) é usar ponteiros: declare GaussSimple (int n, int * IFLAG...), e no main passe o endereço da variável GaussSimple (n, &IFLAG, ...).
4. Pro "relatório", basta responder as questões, mas contextualize. Responder "1. Sim. 2. Não. 3. São 5" não vai ser aceito.