Introdução e Conceitos Preliminares
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYk0fyKizvstUON-8JL5cctcYljWxD9cPj24n0ggoHc7Ywi9UA9CjLHWTFMg1cpN9q5c8Nec00xbSxUYqiQfm_6gE2hpQ0neq2Xyr_lJvcDvJJnOOxAOqc0LVtttfMwOqPe38LRyk6ejv5/s1600/img_post.png)
Um dos assuntos que fazem parte da grade curricular do ensino médio são as equações polinomiais, que são equações que possuem a forma:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEN_UF9Ito5kaMxKJK8w-k53z1h4_Ndo7TsjWBg3-s4qPE_8JA6AAfz1pj4n5iKLa79Hzc1e51iTQ2f35n0vCnGlmEaKHbf_mVIjTfXijwtauWUteYuzbxs_J8OCvXszGTAKAyEo3pwOB2/s1600/1.png)
Exemplos:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM2fxbl-sQC2Ee3KQbGvAbKDFbI22Gf0lLXOzSgczuvOZDsg3MeYQ52WFP0I4kafdZYIinFMhh7XdVH6th0gMtzvFqbMUjkPkh9ptX5lz9xA-tD85XGtkmfhPrXswzE6eRh_ckGfaNC-hq/s1600/2.png)
O objetivo de PoliGauss é gerar aleatoriamente equações polinomiais fazendo uso das Relações de Girard.
Essas relações estabelecem a ligação entre os coeficientes da equação polinomial e suas raízes. Uma equação do segundo grau, por exemplo, com raízes reais r1 e r2 teria a seguinte forma:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9ODzZgGFx6NuUuT1iiKhFCQXyaKokB-kaDaE3WuLm-GQJ6yWMYaoRZtN7Wv6eSh81LUPeEMOuFLoSwIJwUgFCDgVc3oVfS9U5ZA2mLiTzFiU2xZSxtLajfwn7z2hyf3KMFsB4Q8ic6wH5/s1600/3.png)
Ou ainda,
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwAt8BQVzpXu1YFrK4AyaK_Lw6BvNtcIc-k5T_rhZJx45MV1ixjLgnFfide_cU9QRtiXJVGXgu-M3FclMZA2fSi82aYuWw2wgA8tvXUTsneBHop5P1H8DzIz5KgwkKOqPYg-uh5WPR9lY2/s1600/4.png)
Perceba que a constante 'k' permite um leque muito grande de equações equivalentes a original com mesmas raízes. Observe que, se a equação do segundo grau tiver a forma:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAwZ3N1QJyYhI1AC90PxFMD6rm9C1GTwCMmnev0_tBakYhXroyy0Ji_FSB9mWmj55PupFdkQ1M8xlkWOg2KkMLxITNuZ9yz57G4YYzVQmJRMtiYVEAMU_7atjdrRZ2-b9frcTASf0W-DHW/s1600/5.png)
e suas raízes forem os números reais r1 e r1, então a relação entre os coeficientes a, b e c e as raízes seria:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf-8zD4T9iyD7OdJazqdIIegQIW83DHGskadAGQuaiTkkNYISWuXQ8U_wo_0jw0wB7jTF0ycyIfeSYYlmrMsrSQHANKCE4N8I4aHN2t19WxBqg25JN7bLXzU34u4PrC_Q1LZ_H_mZ-Go_9/s1600/9.png)
Essas fórmulas são as Relações de Girard para as equações do segundo grau.
Para finalizar a parte teórica, segue as relações para equações do terceiro grau:
Seja a equação:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxdezNQfTPA0NUvlEAVWsHx3O5ZrPXc-9foUv9dISwCiaui9iRvcadupEdtOXBcXgw-vcF7lg6Z02vJVpig-873Dd_dlNXIGOX_jKFgtA43WuTOmE0tNBuTxdy9duceSkCuwFIfla5Yq5O/s1600/6.png)
E sejam as raízes da equação:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYYI44IQAFE-qfiLlUGcMJsLSFrTy6wITuu0_wUJ9Yg1gZ7mwgQSYIhm3jeUZQVBiFnlJj3t6APVjONeW5zVGwWbb3IQPg35yqorP7mtQtRgTdvahgTv57WUzb_ZI6R-b34xaIHQJtbKlj/s1600/7.png)
As relações de Girard da equação serão:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHr2yxJOe5CYqrdQUNlqsmm6t_bIxVXrOi7XwhPXu8vUWcDinKs7DDIPuPW2DIvOo2h70ilcu3OmPcKNOLV_BTY27rqbL4Cpk1OYjiScY3e-qhhUrPEdp6ij8lsdYWHQyKQ8bRBGhEQcTy/s1600/8.png)
Para maiores detalhes sobre as Relações de Girard e equações polinomiais, o leitor pode consultar a bibliografia no final da postagem.
O Algoritmo
Para gerar as equações o algoritmo realiza os seguintes passos:
- Gerar números inteiros aleatórios entre -7 e7 conforme a quantidade de raízes da equação que será criada (segundo grau são duas raízes, terceiro grau são três raízes e assim por diante);
- Gerar um número aleatório entre -3 e 3 (exceto zero) que será o coeficiente do termo de maior grau;
- Usar “Relações de Girard” para calcular os coeficientes a partir as raízes geradas e multiplicar pelo coeficiente do termo de maior grau (gerado no passo anterior);
- Distribuir em um vetor os coeficientes na ordem do coeficiente do termo de maior grau até o coeficiente do termo de menor grau e, em seguida, alocar nas últimas posições do vetor as raízes em qualquer ordem;
- Retornar o vetor contendo os coeficientes e raízes.
Observe que esse algoritmo em momento algum resolve as equações polinomiais, pois o modo como foram usadas as Relações de Girard torna isso desnecessário.
Foi estabelecido o limite de gerar equações até o quinto grau e raízes de -7 a 7 para que os coeficientes da equação não ficassem muito grandes e o algoritmo torna-se viável para situações de aprendizado.
Implementações
Foram criadas duas versões de PoliGauss: uma em Java e outra em HTML com Javascript (vide fotos).
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGBSIMuwTyN05DCbWfrb-L3A9J6IxomdBECe-sWQRK7NuYACr10QvSkhy7iCuiPemDfK1FP-gwiHwfTgjyQsHQeQpCUYTdJsCkAlKr9YxmbQwqh7vrpt7oZ3E4zd-Ci2KhKhRDO6R5e1aJ/s1600/11.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1s1ofpq2fdGo_6naqYMkS3NS6qCOZ_YTpiTaTV8VqEU9QCXmJ-MMxiXsaI50EFytgBBlwZETNbl3MJPey7WaBiWIlfQseHr523Ifg1_ZMPcD4-suslb4O2nIO7jIOFoWkcg3_MBvSGehD/s1600/poligauss_htmlpicture.png)
Quantidade de equações
A tabela abaixo mostra quantas equações PoliGauss é capaz de gerar:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7c-LtOlIhTsWC75rXyklIqDXIbL4UafeRUpSvzE-q3BpX55BXQnzu5XWk-wR2JWiSLs8E9uTA5vp59ykbey4yNewxI8x45ZOK3lMP6VGVdFRf5dmmbEE_jVTmZ7Gb4HyY06p_fgnyTRnE/s1600/10.png)
Download
Clique no link a seguir para baixar a versão em Java: Poligauss (Java/JAR).
Clique no link a seguir para baixar a versão em HTML/JavaScript: Poligauss (HTML/JavaScript).
Clique no link a seguir para baixar o código fonte em Java: Poligauss (código fonte em Java).
Código Fonte em Java
A seguir, segue a implementação do algoritmo em Java (apenas para rápida referência)
import java.util.Random; /* * Desenvolvido por Henrique Felipe * https://www.blogcyberini.com */ /* * A classe abaixo contém métodos que geram equações de segundo a quinto grau. * As equações são geradas aleatoriamente fazendo uso das 'Relações de Girard'. * Todos os métodos retornam vetores de números inteiros que armazenam, ordenadamente, * os coeficientes da equação seguidos das raízes */ public class PoliGauss { private static Random rnd = new Random();//gerador de números aleatórios /* * Gera equações do segundo grau */ public static int[] segundoGrau() { int[] resp = new int[5]; int a, s1, s2, x1, x2; x1 = 7 - rnd.nextInt(15); x2 = 7 - rnd.nextInt(15); do{ a = 3 - rnd.nextInt(7); }while(a == 0); s1 = - a * (x1 + x2); s2 = a * x1 * x2; resp[0] = a; resp[1] = s1; resp[2] = s2; resp[3] = x1; resp[4] = x2; return resp; } /* * Gera equações do terceiro grau */ public static int[] terceiroGrau() { int[] resp = new int[7]; int a, s1, s2, s3, x1, x2, x3; x1 = 7 - rnd.nextInt(15); x2 = 7 - rnd.nextInt(15); x3 = 7 - rnd.nextInt(15); do{ a = 3 - rnd.nextInt(7); }while(a == 0); s1 = -a * (x1 + x2 + x3); s2 = a * (x1*x2 + x1*x3 + x2*x3); s3 = -a * x1 * x2 * x3; resp[0] = a; resp[1] = s1; resp[2] = s2; resp[3] = s3; resp[4] = x1; resp[5] = x2; resp[6] = x3; return resp; } /* * Gera equações do quarto grau */ public static int[] quartoGrau() { int[] resp = new int[9]; int a, s1, s2, s3, s4, x1, x2, x3, x4; x1 = 7 - rnd.nextInt(15); x2 = 7 - rnd.nextInt(15); x3 = 7 - rnd.nextInt(15); x4 = 7 - rnd.nextInt(15); do{ a = 3 - rnd.nextInt(7); }while(a == 0); s1 = -a * (x1 + x2 + x3 + x4); s2 = a * (x1*x2 + x1*x3 + x1*x4 + x2*x3 + x2*x4 + x3*x4); s3 = -a * (x1*x2*x3 + x1*x3*x4 + x1*x2*x4 + x2*x3*x4); s4 = a * x1 * x2 * x3 * x4; resp[0] = a; resp[1] = s1; resp[2] = s2; resp[3] = s3; resp[4] = s4; resp[5] = x1; resp[6] = x2; resp[7] = x3; resp[8] = x4; return resp; } /* * Gera equações do quinto grau */ public static int[] quintoGrau() { int[] resp = new int[11]; int a, s1, s2, s3, s4, s5, x1, x2, x3, x4, x5; x1 = 7 - rnd.nextInt(15); x2 = 7 - rnd.nextInt(15); x3 = 7 - rnd.nextInt(15); x4 = 7 - rnd.nextInt(15); x5 = 7 - rnd.nextInt(15); do{ a = 3 - rnd.nextInt(7); }while(a == 0); s1 = - a * (x1 + x2 + x3 + x4 +x5); s2 = a * (x1*x2 + x1*x3 + x1*x4 + x1*x5 + x2*x3 + x2*x4 + x2*x5 + x3*x4 + x3*x5 + x4*x5); s3 = -a * (x1*x2*x3 + x1*x3*x4 + x1*x2*x4 + x1*x4*x5 + x1*x2*x5 + x1*x3*x5 + x2*x3*x4+ x2*x3*x5 + x2*x4*x5 + x3*x4*x5); s4 = a * (x1*x2*x3*x4 + x1*x3*x4*x5 + x1*x2*x4*x5 + x1*x2*x3*x5 + x2*x3*x4*x5); s5 = - a * x1 * x2 * x3 * x4 * x5; resp[0] = a; resp[1] = s1; resp[2] = s2; resp[3] = s3; resp[4] = s4; resp[5] = s5; resp[6] = x1; resp[7] = x2; resp[8] = x3; resp[9] = x4; resp[10] = x5; return resp; } }
Agradecimentos
Agradeço ao Aurélio Araújo (Sistemas de Informação - FAP/CE) que testou o algoritmo e deu sugestões de melhorias.
Referências
- [1] DANTE, Luiz Roberto. Matemática, volume único. 1ª edição. São Paulo: Ática, 2005.
- [2] IEZZI, Gelson. Fundamentos de Matemática Elementar, vol. 6: Complexos, Polinômios, Equações. São Paulo: Atual, 1977.
Observações
O nome "PoliGauss" é uma combinação de palavras envolvendo o nome do matemático Carl Friedrich Gauss.
Você pode utilizar a versão HTML/Javascript nesta página do blog: PoliGauss.
Muito bom! Parabéns!
ResponderExcluirObrigado
ExcluirSensacional!
ResponderExcluirVou usar a versão em Javascript.
Muito obrigado!!!
Fico feliz que você tenha gostado!
Excluir