Raízes de uma equação de segundo grau
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
Deixe uma resposta