Como professor de Física, uma das operações mais comuns é a resolução se equações de segundo grau. Embora seja bem simples, a repetição constante deste cálculo acaba se tornando tedioso e gastando um tempo desnecessário.
Uso isto geralmente quando estou preparando as provas, montando gabaritos. Para processo matemáticos mais extensos, geralmente utilizo ferramentas mais adequadas como o Scilab ou o Octave.
O Script
Este script utiliza o pacote bc, uma ferramenta muito útil quanto se necessita fazer cálculos com ponto flutuante no Shell. No Slackware este pacote fica na pasta slackware/ap
, do CD de instalação. Instale-o antes de utilizar este script
O uso do script é bem simples. Você deve passar três parâmetros de entrada, que correspondem aos coeficientes do polinômio de segunda ordem (a, b e c):
y = a x² + b x + c
Exemplo 1:
$ segrau 3 5 2 3 X^2 + 5 X + 2 = 0 Raizes reais: R1 = -.6666666666 R2 = -1.0000000000
O script resolve também raízes imaginárias.
Exemplo 2:
$ segrau 3 5 5 3 X^2 + 5 X + 5 = 0 Raizes complexas: Z1 = -.8333333333 + i .9860132971 Z2 = -.8333333333 - i .9860132971
O script não necessita de maiores esclarecimentos, pois é programa bem linear. Vou dar apenas uma atenção ao uso do comando bc.
O bc possui uma sintaxe muito parecida com o C, por isto seu uso não chega a trazer nenhuma grande novidade. O que você deve fazer é enviar ao comando bc, a impressão da operação matemática desejada. Por exemplo, o cálculo do delta do polinômio do Exemplo 1 é feito com a impressão da linha “scale=10; 5^2-4*3*2” ao comando bc:
$ echo "scale=10; 5^2-4*3*2" | bc 1
O “scale=10” diz ao bc que ele deve retornar uma resposta com 10 algarismos significativos. Por padrão, o bc retorna apenas a parte inteira da operação.
O Script segrau
Segue abaixo o script completo:
#!/bin/bash # Equacao de segundo grau # Por Rudson Alves # Versao 1.2 # if [ "$3" == "" ]; then echo "Entre: segrau" echo "para: AX^2 + BX + C = 0" echo exit fi echo "$1 X^2 + $2 X + $3 = 0" DELTA=$( echo "scale=10; $2^2 - 4*$1*$3" | bc ) TEST=$( echo "$DELTA < 0" | bc ) if [ "$TEST" != "0" ]; then echo "Raizes complexas:" REAL=$( echo "scale=10; ((-1)*$2)/(2*$1)" | bc ) SQRT=$( echo "scale=10; sqrt((-1)*$DELTA )" | bc ) IMAG=$( echo "scale=10; $SQRT/(2*$1)" | bc ) echo "Z1 = $REAL + i $IMAG" echo "Z2 = $REAL - i $IMAG" else echo "Raizes reais:" SQRT=$( echo "scale=10; sqrt($DELTA )" | bc ) X1=$( echo "scale=10; (((-1)*$2) + $SQRT)/(2*$1)" | bc ) X2=$( echo "scale=10; (((-1)*$2) - $SQRT)/(2*$1)" | bc ) echo "R1 = $X1" echo "R2 = $X2" fi