Pular para o conteúdo principal

Matemática no terminal de comandos

Precisa fazer um cálculo rápido sem ter que abrir nenhuma aplicação gráfica como, por exemplo, uma planilha de cálculo? O terminal de comandos do Linux é ideal para esses casos.

Para cálculos com ponto flutuante usando somente o terminal de comandos temos diversas opções como o comando bc, por exemplo.

O comando bc (basic calculator) é utilizado para cálculos com precisão arbitrária e possui a vantagem de já vir instalado em qualquer distribuição Linux, portanto, sem a necessidade de instalar nada!

Além do bc, as linguagens de programação de modo geral são ricas em recursos matemáticos e algumas podem ser executadas interativamente no terminal. 

Neste artigo mostraremos exemplos de cálculos usando o bc, gnuplot, Python, Scilab, R, Julia, bash e zsh .

Operadores matemáticos

Para realizarmos os cálculos, precisamos saber a sintaxe básica e que símbolos são usados para representar os operadores matemáticos.

  • Soma, subtração, multiplicação e divisão
    • +, -, *, /
  • resto da divisão
    • %, usado pelo bc, Python, gnuplot, Julia, bash, zsh (além do C, etc.).
    • %%, usado pelo R
    • modulo(x,y), usado pelo Scilab.
  • exponenciação
    • **, usado pelo bc, Python, gnuplot, R, bash, zsh (além de Fortran, etc.)
    • ^, usado pelo Scilab, R, Julia.
    • Obs.: O R aceita as duas notações, '**' e '^'.

Esses operadores acima estão presentes em praticamente todas as linguagens e softwares com recursos matemáticos, mas outros operadores podem ser definidos conforme a linguagem ou software.

A calculadora bc

Antes de demonstrarmos o uso do bc, seguem algumas dicas:

  • A palavra "scale" define o número de casas decimais
  • Se bc for chamado com a opção -l (letra L minúscula), a biblioteca "math" é pré-carregada e o "scale" padrão é definido como 20. 
  • A biblioteca "math" possui as seguintes funções:
    s (x): seno, x em radianos.
    c (x): cosseno, x is in radians.
    a (x): arco tangente, returna radianos.
    l (x): logaritmo natural.
    e (x): função exponencial de base "e" (número de Euler).
    j (n,x): função de Bessel de ordem inteira "n".

Vamos usar a interface do bc para realizar as seguintes operações:

  • Calcular o valor de pi com 10 casas decimais;
  • Calcular cos(pi/4);
  • Calcular ln(10);
  • Definir recursivamente a função fat(x)  para cálculo do fatorial.

Note que cos(pi/4) deu um pouco diferente de cos(atan(1)). Tente explicar o motivo! Para sair da interface do bc, digite quit<ENTER>.

gnuplot

O gnuplot pode ser facilmente instalado na família Ubuntu ou Debian com:

$ sudo apt install gnuplot-x11

No comando de instalação, poderíamos ter omitido "-x11" mas, nesse caso, o terminal padrão instalado seria o "qt". Para executar o gnuplot, basta digitar gnuplot <ENTER> e para encerrar, digite quit<ENTER>.

Vamos usar o gnuplot para calcular cos(π/4), ln(10) e o fatorial de 4:

Python

O Python geralmente já vem instalado no Linux, mas se o seu sistema só tiver o Python, versão 2 instalado, é recomendável instalar a versão 3, bastando digitar no terminal:

$ sudo apt install python3

Para entrar na interface de comandos do Python, basta digitar python3 <ENTER>. Depois, é só importar a biblioteca de funções matemáticas para usar as funções matemáticas. Quando tiver terminado, digite quit() <ENTER>.

A imagem a seguir ilustra o uso do Python para realizar cálculos matemáticos.

Scilab

O Scilab é um software para computação numérica com linguagem semelhante ao Matlab. Além da interface gráfica normal, O Scilab possui uma interface de linha de comando que pode ser rodada diretamente no terminal de comandos do Linux.

Vimos que o caractere de percentual (%) é usado por outras linguagens para indicar o resto da divisão de dois números. O "%" também é usado por algumas linguagens como indicativo de comentário (caso do LaTeX e do Matlab). No Scilab, o "%" é um caractere especial usado para definir algumas constantes, por exemplo, %pi, %i (unidade imaginária) e %e (número de Euler, base dos logaritmos naturais). 

Para instalar o Scilab no Ubuntu, basta digitar o seguinte comando no terminal:

$ sudo apt install scilab

Para executar o Scilab diretamente no Terminal, digite scilab-cli <ENTER> e para encerrar digite quit <ENTER>.

A imagem a seguir ilustra o uso do Scilab para realizar cálculos matemáticos.

R

R é um sistema para computação estatística e visualização gráfica de dados. Para instalá-lo no Ubuntu e derivados basta digitar no terminal:

$ sudo apt install r-base

Para executá-lo diretamente no terminal de comandos, tecle R <Enter> e para encerrá-lo, tecle q() <ENTER>. 

A imagem a seguir ilustra o uso do R para realizar cálculos matemáticos.

Julia

Julia é uma linguagem de tipagem dinâmica, apropriada para computação científica e numérica, com desempenho comparável às linguagens tradicionais de tipagem estática.

Para instalação, basta seguir as instruções disponíveis na área de downloads do site do Julia. A instalação é simples, bastando baixar a pasta compactada contendo todos os arquivos necessários. Até o momento da edição final desse texto, a última versão estável era a versão 1.5.2, lançada em 23 de setembro de 2020 e foi baixada com o comando a seguir:

$ wget https://julialang-s3.julialang.org/bin/linux/x64/1.5/julia-1.5.2-linux-x86_64.tar.gz

Para descompactar o arquivo, estando no mesmo diretório em que o arquivo compactado foi baixado, digite:

$ tar xvzf julia-1.5.2-linux-x86_64.tar.gz

Será criada a pasta julia-1.5.2 (se você tiver baixado a versão 1.5.2) e o arquivo executável encontra-se, como de costume, na subpasta bin e chama-se, como era de se esperar, julia.

Para iniciar a interface de comandos do Julia, basta digitar julia <ENTER> e para encerrar, digite exit() <ENTER> ou <CTRL> d.

A imagem a seguir ilustra o uso do Julia para realizar cálculos matemáticos.

bash

O bash, o interpretador de comandos padrão na maioria das distribuições Linux, não possui nativamente suporte a cálculos com números de ponto flutuante mas está apto a fazer cálculos com números inteiros.

Os cálculos usando o bash podem ser realizados diretamente no terminal de comandos ou em arquivos de script (chamados de shell script ou bash script) utilizando-se, frequentemente, dos elementos seguintes:

  • o comando echo
  • a expansão aritmética (( ... ))
  • os operadores aritméticos: -, +, *, /, %, **, etc

Vejamos alguns exemplos:


Lembramos que, na linguagem bash, o operador '%' retorna o resto de uma divisão entre números inteiros, '**' significa a exponenciação, ou seja, x**2 é o mesmo que elevar x ao quadrado. O operador '+=' retorna a soma e atualiza o valor da variável precedente. 

Apesar do bash não ter suporte nativo a ponto flutuante, se você tiver um programa com recursos matemáticos melhores e que aceite receber dados de entrada via pipe, '|', o bash pode encaminhar os cálculos para serem processados por tal programa. Esse é o caso do bc e do gnuplot. 

A imagem a seguir demonstra o bash solicitando ao bc para fazer os cálculos

A imagem seguinte ilustra o bash solicitando ao gnuplot para fazer os cálculos.

zsh

Além do bash, há vários outros interpretadores de comandos que podem ser instalados, entre eles, o zsh.

O zsh possui uma série de aprimoramentos com a finalidade de aumentar a usabilidade do terminal de comandos e inclusive a capacidade de realizar cálculos de ponto flutuante.

A imagem seguinte ilustra esses recursos.

Note, que na última linha, elevamos a 0.5 para obter a raiz quadrada.

Por enquanto é só!


Comentários

Postagens mais visitadas deste blog

Encontrar texto em arquivos pdf

Problema : Você tem zilhões de artigos (papers) em pdf mas quer saber se uma certa sequência de texto (palavra ou frase) está escrita neles. Por exemplo, suponhamos que a frase a ser pesquisada é "fitting" Solução 1: via pdfgrep (mais recomendada)     No terminal de comandos, (trocando "richard" pelo seu nome do usuário), digite: $  find ~ -name '*.pdf' -exec pdfgrep -H -i 'fitting' {} \; Para indicar quantas ocorrências em cada pdf: find ~ -name '*.pdf' -exec pdfgrep -c -H -i 'fitting' {} \; | awk -v FS=":" -v OFS="\t" '$2>0 { print $2, $1 }' | sort -hr Para mostrar somente a primeira ocorrência no pdf: $  find ~ -name '*.pdf' -exec pdfgrep -H -i -m 1 'fitting' {} \; Solução 2: via pdftotext     Nota: pode apresentar mensagens de erro quando há problemas na conversão para texto     No terminal de comandos digite: $  find ~ -name '*.pdf' -exec sh -c 'pdftotext "{}"...

Iniciando o terminal com o logotipo da sua distro e informações do sistema

Vamos ver algumas formas de tornar seu terminal de comandos mais divertido e atraente instalando o neofetch pra exibir o logo da sua distro no terminal de comandos. Abra um terminal de comandos (Ctrl+Shift+T funciona em algumas distribuições); Digite os comandos seguintes (sem incluir o "$"):   $ sudo add-apt-repository ppa:dawidd0811/neofetch $ sudo apt-get update $ sudo apt-get install neofetch Teste o neofetch digitando no terminal: $ clear;neofetch As figuras abaixo indicam que o neofetch identificou (corretamente) duas distros Lubuntu como sendo um Ubuntu, porém uma com ambiente LXDE e outra LXQT. Na primeira figura foi usado o LXTerminal e na segunda o QTerminal: Para exibir o logotipo do Lubuntu 16.04 (e não do Ubuntu) pode-se digitar o seguinte comando:   $ clear;neofetch --ascii_distro Lubuntu  obtendo-se a seguinte tela: No caso do Lubuntu 20.04, o neofetch identificou o "Host" como sendo o VirtualBox 1.2...