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 um comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.