Desculpa, isso é chatao, mas to desesperado, pois tenho um trabalho pra entregar no começo da semana, preciso de um programa que resolva sistemas lineares em java. Eu sei fazer isso no papel, mas como nao sei NADA de java e meu professor é louco e pensa que eu posso fazer isso, coisa que nem tenho tempo, estou usando meu ultimo recurso que é pedir pra uma boa alma me ajudar.
Agradeço desde já se alguem puder me passar o codigo.
DEsculpa, mas é que to DESESPERADO
Cara, mas qual eh a dimensao do seu sistema? Essas coisas sao bem complicadas, mas para um sistema 2X2 (duas equacoes com duas variaveis) podemos resolver, sim!
Para resolver um sistema linear, use:
http://commons.apache.org/math/userguide/linear.html#a3.4_Solving_linear_systems
É assim, o usuário vai definir a dimensão da matriz (Sistema)
a partir dos dados fornecidos por ele, o sistema deve escalonar e exibir o resultado. esse que é o problema, rs
Você leu a página que lhe passei? A parte mais chata (resolver o sistema) está prontinha. Basta você entrar com os dados.
Cara código pronto é meio difícil você conseguir aqui. Mas podemos te ajudar a começar o trabalho.
Vamos tentar modelar o problema. Você precisa resolver sistemas de equações na seguinte forma, correto?
a1x1 + a2x2 + … + anxn = a
b1x1 + b2x2 + … + bnxn = b
…
Então basicamente precisaremos de:
- Uma classe Monomio, que representará um termo de uma equação (exemplo: a1x1) e conterá o atributo termoIndependente, que é o número que múltiplica a variável (no exemplo dado, a1). Não precisa armazenar a variável, pois podemos admitir que cada monômio corresponde a uma variável diferente. Mas se quiser, pode criar um atributo para armazená-la também.
A classe ficaria assim então:
class Monomio {
private double termoIndependente;
private char variável; // Opcional.
}
2) Uma classe Equacao, que conterá os seguintes atributos:
- uma collection de Monomios;
- um atributo que armazena a igualdade.
A classe ficaria assim:
class Equacao {
private Collection<Monomio> termos;
private double valor;
}
Como exemplo, se tivermos a seguinte equação linear:
2x - y = 3
Podemos construí-la assim:
Equacao eq = new Equacao(New Monomio(2), new Monomio(-1), 3);
- Finalmente, uma classe Sistema que conterá um collection de equações.
class Sistema {
private Collection<Equacao> equacoes;
}
Acredito que com esse modelo inicial já seja possível começar. Vá postando as dúvidas aí.
É interessante que outros usuários também participem para evoluir o modelo, se for necessário.
Muito bom, porem eu usaria o termo coeficiente. Agora a variavel tem cara de ser outro objeto e não um simples char, imho.
Pensando bem, vc não tem apenas uma coleção, vc pode ter um MAPA de variavel -> termo e, ao adicionar um termo, tem que levar isso em consideração
2x + y = 5
x= 2
para resolver, pega a primeira e subtrai do dobro da segunda
(2x + y) - 2(x) = 5 - 2(2)
2x +y -2x = 5 - 4 -> onde 2x - 2x é 0 x!!!
y = 1
Ótimas sugestões peczenyj. É muito interessante quando outra pessoa aplica sua ótica ao problema.
Pois é, eu acabei confundindo coeficiente com termo independente, que é na verdade um monômio de grau zero. Misturei na hora de nomear os atributos.
No caso de sistemas lineares, onde o grau é sempre 1, não acho que seja necessário criar um objeto para a variável. Poderia ficar como char mesmo, tomei essa decisão só pra simplificar um pouco o modelo.
Apenas aplicando as sugestões do peczenyj.
[code]class Variavel {
private char letra;
private int grau; // Sempre será 1 para sistemas lineares.
// MUITO IMPORTANTE SOBRESCREVER equals() E hashCode()!!! Pois esse objeto será key do Map.
}
class Termo {
private double coeficiente;
}
class Equacao {
private Map<Variavel, Termo> termos;
private double valor;
}
class Sistema {
private Collection equacoes;
}[/code]
Beleza , o que fica de sugestão para quem precisa fazer o programa os metodos em Equacao para multiplicar e somar, alem de acessar o coeficientes de dada variavel de forma mais direta, talvez, sem passar pelos termos.
Isso é util para pivotamento e processar combinações lineares.
Ok gente, obrigado pela ajuda.
pra mim nao resolveu nada, desculpem pelo transtorno.
eu não sei NADA de java, quero que meu professor se exploda, o jeito é reprovar mesmo rs.
mas valeu pela tentativa… olbrigado mesmo assim