Seja bem vindo ao Fórum do JavaFree.org
Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login
Olá a todos !! eu estou a ter algumas dificuldades em entender uma pequena aplicação (que segue em anexo) que tem como objectivo resolver sistemas de equações.
Ainda estou no inicio do estudo de vectores e matrizes e encontrei na net este exemplo que acho ser um bom exemplo de aplicação até porque daqui a algum tempo é certo que vou ter de fazer um trabalho que tem muito haver com estes sistemas!
as minhas dúvidas são:
trantado-se de sist. eqs lineares as matrizes tem de ser quadradas, linhas=colunas certo? então porque é que fica a matriz como sendo:
double matriz[][]= new double[n][n+1];
poruqe é que somamos "1" a posição das colunas?
Depois não percebo bem o que faz o método "calc", a inclusão de funções "math.abs" ?? e aquelas igualdades no final do método envolvendo auxiliar[] também não consigo perceber!!
enfim, agradecia que alguma alma caridosa me pudesse explicar este código
Oi,
a solucao de sistemas lineares nao é o meu forte... faz anos que nao fiz nada nesse sentido, mas talvez de para ajudar:
1) [n][n+1] acho que um metodo de solucao implica em adicionar a coluna com as constantes (lado direito do =) ao final da matriz quadrada e dai simplificar essa matriz:
Exemplo:
ax + by = c
dx + ey = f
resulta em
[[a b c]
[d e f]]
só que no programma que voce passou isso NAO é usado... se quiser pode eliminar a coluna adicional que ele continua funcionando
2) o Math.abs é usado para determinar o maior valor absoluto de cada linha ou coluna, sem considerar o sinal
3) o vetor auxiliar é usado para "trocar" a poiscao de duas linhas sem ter que modificar asmatrizes. basicamente é um mapeamento do indice da linha. Exemplo com n = 3:
inicio: auxiliar = [0 1 2]
ao trocar a linha 0 com a linha 1: [1 0 2]
espero que isso ajude...
[]]] _________________ Nome real: Carlos F. Heuberger
Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!
Para resolver sistemas lineares tente implementar o metodo de gauss-seidel, é um dos mais eficazes, ou se preferir gauss-jacobi, ou mesmo eliminação de gauss, tenho a implementação destes metodos, se quiser elas. so entrar em contado.
De uma olhada nesse link.
flw _________________Rodrigo Antonio Gonzato
nao tinha lido direito seus post.
para que um sistemas de equaçoes lineares tenha solução o numero de equaçoes tem q ser >= ao numero de variaves. o motivo pelo qual se soma 1 a segunda matriz é que sera inserida nela tb o vetor solução, ou seja os valores q aparecem apos as variaveis.
qlq duvida so entrar em contato, espero ter ajudado.
t+ e boa sorte. _________________Rodrigo Antonio Gonzato
Olá, muito obrigado simu e ragonzato!
simu em relação ao que disseste da matriz poder ser [n][n], testei e dá bem de facto não é necessário a inclusão da coluna extra! pelo o que percebi pode ser assim porque os termos independentes ( os valores de x) estão definidos num outro vector (x[]) , penso que é isso!
o que eu queria saber acerca do "math.abs" é se na parte do código onde se encontra esta função ele faz ai a transformação em matriz triangular superior ? (ou seja a eliminação a "zeros" abaixo da diagonal principal).
o que eu consegui perceber até agora é que o método calc() faz operações e trocas somente na matriz "a" com ajuda do auxiliar[] , mas depois o codigo que se segue no método resolver() :
é que ainda não consegui perceber bem! ..o porquê de ser x[n-1] e estarmos a trabalhar com o auxiliar (dado que eu tinha partido do principio qu esta matriz (auxiliar) fosse só utilizada no método calc().
ragonzato agradeço a tua disponibilidade para me dares a conhecer outros exemplos se poderes enviar-me por mail para dar uma olhadela
marta-fontes1981@hotmail.com
bom, acho que o algoritmo esta um pouco baguncado, ou melhor, um tanto otimizado, pois realmente nao chega a transformar a matriz em uma triangular superior. alguns dos passos para tanto foram pulados e sao executados fora do calc() na hora de achar o resultado... por isso tambem que o resultado é calculado a partir do x[n-1] (ultimo elemento).
O auxiliar tambem tem que ser usado fora do calc pois tem que mudar a ordem dos elementos do b[]... se estivesse usando a coluna adicional, com os valores de b[], obteria o mesmo efeito.
Mas, como eu ja escrevi, faz muito tempo que trabalhei (so na faculdade) com equacoes lineares...
[]]]
_________________ Nome real: Carlos F. Heuberger
Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!
Por nada, vou lhe enviar sim, eles são algoritmos para calculo de valor exato e ou apr oximado, usados geralmente em calculo numerico computacional, vou organizalos em uma classe e assim q estiver pronto lhe envio.
se tiveres duvidas sobre seu funcionamento, so mandalas q ajudo a sanalas.
Só mais uma coisa em relação ao código, nestes ciclos (1)e(2) são percorridos todos os elementos da matriz certo? qual a diferença que existe entre eles, o que é que faz cada um deles ?!
Por nada, vou lhe enviar sim, eles são algoritmos para calculo de valor exato e ou apr oximado, usados geralmente em calculo numerico computacional, vou organizalos em uma classe e assim q estiver pronto lhe envio.
se tiveres duvidas sobre seu funcionamento, so mandalas q ajudo a sanalas.
Anexe aqui no fórum mesmo ou crie um tutorial para que todos possam aproveitá-lo também _________________Sugestão de Livros
vou postar aki no forum, so terrei q comentar os codigo antes
postarei o algoritmo de sassenfeld e os algoritmos para teste de convergencia.
caso alguem necessite de algoritmos relacionados a calcurlo numerico computacional pode entrar em contato, tenho alguns.
vou tentar montar um tutorialzinho, tentar ehheheh
flws
MartinhaPosts:3
Olá a todos !! eu estou a ter algumas dificuldades em entender uma pequena aplicação (que segue em anexo) que tem como objectivo resolver sistemas de equações.
Ainda estou no inicio do estudo de vectores e matrizes e encontrei na net este exemplo que acho ser um bom exemplo de aplicação até porque daqui a algum tempo é certo que vou ter de fazer um trabalho que tem muito haver com estes sistemas!
as minhas dúvidas são:
trantado-se de sist. eqs lineares as matrizes tem de ser quadradas, linhas=colunas certo? então porque é que fica a matriz como sendo:
double matriz[][]= new double[n][n+1];
poruqe é que somamos "1" a posição das colunas?
Depois não percebo bem o que faz o método "calc", a inclusão de funções "math.abs" ?? e aquelas igualdades no final do método envolvendo auxiliar[] também não consigo perceber!!
enfim, agradecia que alguma alma caridosa me pudesse explicar este código
Muito obrigado a todos !!
simuPosts:9416
Oi,
a solucao de sistemas lineares nao é o meu forte... faz anos que nao fiz nada nesse sentido, mas talvez de para ajudar:
1) [n][n+1] acho que um metodo de solucao implica em adicionar a coluna com as constantes (lado direito do =) ao final da matriz quadrada e dai simplificar essa matriz:
Exemplo:
ax + by = c
dx + ey = f
resulta em
[[a b c]
[d e f]]
só que no programma que voce passou isso NAO é usado... se quiser pode eliminar a coluna adicional que ele continua funcionando
2) o Math.abs é usado para determinar o maior valor absoluto de cada linha ou coluna, sem considerar o sinal
3) o vetor auxiliar é usado para "trocar" a poiscao de duas linhas sem ter que modificar asmatrizes. basicamente é um mapeamento do indice da linha. Exemplo com n = 3:
inicio: auxiliar = [0 1 2]
ao trocar a linha 0 com a linha 1: [1 0 2]
espero que isso ajude...
[]]]
_________________ Nome real: Carlos F. Heuberger
Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!
"The mod javafree deserves, but not the one it needs right now."
--------------------
Não leio nem respondo MPs!
This posting is provided AS IS with no warranties and confers no rights.
ragonzatoPosts:144
Para resolver sistemas lineares tente implementar o metodo de gauss-seidel, é um dos mais eficazes, ou se preferir gauss-jacobi, ou mesmo eliminação de gauss, tenho a implementação destes metodos, se quiser elas. so entrar em contado.
De uma olhada nesse link.
flw
_________________Rodrigo Antonio Gonzato
ragonzatoPosts:144
nao tinha lido direito seus post.
para que um sistemas de equaçoes lineares tenha solução o numero de equaçoes tem q ser >= ao numero de variaves. o motivo pelo qual se soma 1 a segunda matriz é que sera inserida nela tb o vetor solução, ou seja os valores q aparecem apos as variaveis.
qlq duvida so entrar em contato, espero ter ajudado.
t+ e boa sorte.
_________________Rodrigo Antonio Gonzato
MartinhaPosts:3
Olá, muito obrigado simu e ragonzato!
simu em relação ao que disseste da matriz poder ser [n][n], testei e dá bem de facto não é necessário a inclusão da coluna extra! pelo o que percebi pode ser assim porque os termos independentes ( os valores de x) estão definidos num outro vector (x[]) , penso que é isso!
o que eu queria saber acerca do "math.abs" é se na parte do código onde se encontra esta função ele faz ai a transformação em matriz triangular superior ? (ou seja a eliminação a "zeros" abaixo da diagonal principal).
o que eu consegui perceber até agora é que o método calc() faz operações e trocas somente na matriz "a" com ajuda do auxiliar[] , mas depois o codigo que se segue no método resolver() :
é que ainda não consegui perceber bem! ..o porquê de ser x[n-1] e estarmos a trabalhar com o auxiliar (dado que eu tinha partido do principio qu esta matriz (auxiliar) fosse só utilizada no método calc().
ragonzato agradeço a tua disponibilidade para me dares a conhecer outros exemplos se poderes enviar-me por mail para dar uma olhadela
marta-fontes1981@hotmail.com
Mais uma vez obrigado a todos pela a ajuda !!
simuPosts:9416
bom, acho que o algoritmo esta um pouco baguncado, ou melhor, um tanto otimizado, pois realmente nao chega a transformar a matriz em uma triangular superior. alguns dos passos para tanto foram pulados e sao executados fora do calc() na hora de achar o resultado... por isso tambem que o resultado é calculado a partir do x[n-1] (ultimo elemento).
O auxiliar tambem tem que ser usado fora do calc pois tem que mudar a ordem dos elementos do b[]... se estivesse usando a coluna adicional, com os valores de b[], obteria o mesmo efeito.
Mas, como eu ja escrevi, faz muito tempo que trabalhei (so na faculdade) com equacoes lineares...
[]]]
_________________ Nome real: Carlos F. Heuberger
Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!
"The mod javafree deserves, but not the one it needs right now."
--------------------
Não leio nem respondo MPs!
This posting is provided AS IS with no warranties and confers no rights.
ragonzatoPosts:144
Por nada, vou lhe enviar sim, eles são algoritmos para calculo de valor exato e ou apr oximado, usados geralmente em calculo numerico computacional, vou organizalos em uma classe e assim q estiver pronto lhe envio.
se tiveres duvidas sobre seu funcionamento, so mandalas q ajudo a sanalas.
_________________Rodrigo Antonio Gonzato
MartinhaPosts:3
obrigado ragonzato, fico a espera =)
Só mais uma coisa em relação ao código, nestes ciclos (1)e(2) são percorridos todos os elementos da matriz certo? qual a diferença que existe entre eles, o que é que faz cada um deles ?!
(1)
------
(2)
-------
mais uma vez obrigado pela a ajuda!!
BasePosts:1
ois ragonzato podes me enviar tb para mim a resolução de Eq. Lineares pelo metodo de Gauss-Seidel? ivofcmelo@gmail.com se poder agradesso-te bues....
daltoncamargoPosts:8899