Repostiório de Códigos da Disciplina de Cálculo Numérico - 2025.2
- Sobre
- Como rodar?
- Requisitos
- 📚 Documentação
- 📖 Guia LaTeX
- ✅ Testes
- 🚀 CI/CD
- 📊 Cobertura
- 🤝 Contribuição
- 📄 Licença
- Autores
Este repositório contém a implementação completa dos algoritmos estudados na disciplina de Cálculo Numérico do semestre 2025.2, desenvolvida como projeto acadêmico.
- Disciplina: Cálculo Numérico
- Semestre: 2025.2
- Professor: Rodrigo Lacerda da Silva
- Aluno: Pedro Henrique Rocha de Andrade
- Curso: Bacharelado em Engenharia de Computação
- Instituição: Instituto Federal Fluminense - Campus Bom Jesus do Itabapoana
- Período: Setembro/2025 à Março/2026
- Local: Bom Jesus do Itabapoana - RJ
- Implementar algoritmos numéricos fundamentais em Python
- Desenvolver uma biblioteca robusta e bem testada
- Criar documentação técnica completa e acessível
- Aplicar boas práticas de desenvolvimento de software
- Demonstrar aplicações práticas dos métodos numéricos
- Linguagem: Python 3.8+
- Bibliotecas: NumPy, SymPy, Matplotlib, SciPy
- Testes: pytest com 96 testes unitários
- Documentação: Sphinx com reStructuredText
- CI/CD: GitHub Actions
- Controle de Versão: Git
A implementação cobre todos os tópicos principais da ementa, incluindo:
- Números Binários e Análise de Erros
- ✅ Representação de números em diversas bases
- ✅ Conversão de números nos sistemas decimal e binário
- ✅ Aritmética de ponto flutuante
- ✅ Erros absolutos e relativos
- ✅ Erros de arredondamento e truncamento em um sistema de aritmética de ponto flutuante
- Solução de Equações não Lineares
- ✅ Isolamento de raízes, refinamento e critérios de parada
- ✅ Método da bisseção
- ✅ Método do ponto fixo
- ✅ Método de Newton-Raphson
- ✅ Método da secante
- ✅ Comparação entre os métodos
- Interpolação
- ✅ Interpolação polinomial
- ✅ Formas de se obter o polinômio interpolador: resolução do sistema linear, forma de Lagrange e forma de Newton
- ✅ Estudo do erro na interpolação
- ✅ Fenômeno de Runge
- ✅ Funções spline: spline linear interpolante e spline cúbica interpolante
- Ajuste de Curvas
- ✅ Caso discreto
- ✅ Caso contínuo
- ✅ Método dos quadrados mínimos
- ✅ Caso não linear
- Integração Numérica
- ✅ Regra dos trapézios
- ✅ Regra dos trapézios repetida
- ✅ Regra 1/3 de Simpson
- ✅ Regra 1/3 de Simpson repetida
- ✅ Teorema geral do erro
- Soluções Numéricas de Equações Diferenciais Ordinárias
- ✅ Problemas de valor inicial
- ✅ Método de Euler, métodos de série de Taylor
- ✅ Métodos de Runge-Kutta de 2.ª ordem
- ✅ Métodos de Runge-Kutta de ordens superiores
- ✅ Equações de ordem superior, problemas de valor de contorno
- ✅ Método das diferenças finitas
## 📁 Estrutura do Projeto
- Python - Python
- @pedroiff0 - Pedro Henrique Rocha de Andrade
- Documentação de API: Documentação completa de todas as funções com exemplos de uso
- Testes Interativos: Cada teste unitário tem sua própria página com comandos para execução
- Matriz de Funcionalidades: Visão geral das implementações por módulo
- Exemplos Práticos: Casos de uso reais com gráficos e saídas
- Geramos um resumo com as docstrings dos testes unitários em
docs/tests_unitarios.md - Esse arquivo é atualizado automaticamente por
scripts/generate_tests_docs.pye contém todas as descrições dos testes por módulo - Introdução ao Cálculo Numérico
- Fundamentos: Análise de erros e representação numérica
- Raízes de Equações: Métodos da bissecção, Newton-Raphson, secante
- Sistemas Lineares: Eliminação de Gauss, LU, Jacobi
- Interpolação: Lagrange, Newton, diferenças divididas
- Ajuste de Curvas: Mínimos quadrados, regressão linear e polinomial
- Integração Numérica: Trapézio, Simpson, Gauss-Legendre
- Equações Diferenciais: Euler, Runge-Kutta, sistemas
- Classe Personalizada:
guia.clsbaseada embook.clscom configurações brasileiras - Highlighting de Código: Integração com
mintedpara syntax highlighting de Python - Bibliografia ABNT: Formatação de referências no padrão brasileiro
- Slides Beamer: Apresentações automáticas geradas a partir do conteúdo
- Makefile Automatizado: Compilação simplificada com um comando
guia_calculo_numerico.pdf: Livro completo (44 páginas)guia_slides.pdf: Apresentações em Beamer (10 slides)- Nomenclatura:
test_nome_descritivo_da_funcao() - Docstrings: Em português, descrevendo o que é testado
- Imports: Use imports absolutos (
from codigos import modulo) - Asserções: Use
pytest.approx()para comparações numéricas - Cobertura: Teste casos normais, bordas e erros
- Testes Automáticos: Todos os testes são executados em cada push/pull request
- Build da Documentação: Documentação Sphinx é gerada e implantada automaticamente
- Verificação de Qualidade: Linting e validação de código
- Deploy: Documentação atualizada é publicada em GitHub Pages
- ✅ Cobertura de Testes: 96% (96 testes unitários passando)
- ✅ Build Status: Todas as verificações automatizadas passando
- ✅ Documentação: Gerada e implantada automaticamente
- ✅ Linting: Código seguindo padrões de qualidade
- Testes Automáticos: Executados em push e pull requests
- Verificação Multi-Plataforma: Compatibilidade com Python 3.8+
- Build da Documentação: Sphinx gerado automaticamente
- Deploy Automático: Documentação atualizada em GitHub Pages
- Relatórios de Cobertura: Análise detalhada da cobertura de testes
- Validação de Código: Linting e formatação automática
calculoNumerico/
├── codigos/ # Módulos principais
│ ├── bases.py # Conversões de bases numéricas
│ ├── sistemaslineares.py # Resolução de sistemas lineares
│ ├── interpolacoes.py # Interpolação polinomial
│ ├── ajustecurvas.py # Ajuste de curvas (mínimos quadrados)
│ ├── integracoes.py # Integração numérica
│ ├── edos.py # Equações diferenciais ordinárias
│ ├── raizes.py # Métodos de busca de raízes
│ ├── calcnum.py # Menu principal interativo
│ └── ...
├── tests/ # Testes unitários
│ ├── test_*.py # Testes por módulo
│ ├── exemplos/ # Exemplos de uso
│ └── inputs/ # Arquivos de entrada para testes
├── docs/ # Documentação Sphinx
│ ├── _build/ # Documentação compilada
│ ├── scripts/ # Scripts para geração de docs
│ ├── tests/ # Páginas de testes individuais
│ └── *.rst # Arquivos reStructuredText
├── guia/ # Livro Guia em LaTeX
│ ├── tarefas/ # Tarefas da disciplina
│ ├── solucoes/ # Soluções das tarefas
└── README.md # Este arquivo
Python 3.8+
Instale o pacote diretamente do repositório:
pip install git+https://github.com/pedroiff0/CalculoNumerico.gitOu clone e instale localmente:
git clone https://github.com/pedroiff0/CalculoNumerico.git
cd CalculoNumerico
pip install -e .Após a instalação, execute o menu interativo:
calcnumOu importe os módulos em Python:
from codigos import bases, sistemaslineares, edosA documentação completa está disponível em GitHub Pages e é gerada automaticamente usando Sphinx.
# Instalar dependências
pip install -r codigos/requirements.txt
# Construir documentação
cd docs
make html
# Abrir no navegador
open _build/html/index.htmlPara regenerar a documentação dos testes localmente:
python scripts/generate_tests_docs.pyAlém da documentação técnica em Sphinx, o projeto inclui um livro guia completo em LaTeX com implementações detalhadas e explicações teóricas de todos os métodos numéricos.
O guia abrange todos os tópicos da disciplina:
# Compilar o livro completo
cd guia
make book
# Compilar apenas os slides
make slides
# Compilar tudo
make all
# Limpar arquivos auxiliares
make cleanguia/
├── latex/ # Arquivos LaTeX principais
│ ├── guia.cls # Classe LaTeX personalizada
│ ├── main.tex # Arquivo principal do livro
│ └── slides.tex # Apresentações Beamer
├── capitulos/ # Capítulos do livro
├── frontmatter/ # Capa e elementos pré-textuais
├── backmatter/ # Apêndices e referências
├── biblio.bib # Referências bibliográficas
├── Makefile # Sistema de compilação
└── README_guia.md # Documentação detalhada
Após a compilação, são gerados:
# macOS com MacTeX
brew install --cask mactex
# Instalar pygments para minted
pip install Pygments
# Verificar instalação
cd guia && make check-depsO projeto inclui 96 testes unitários abrangentes:
# Rodar todos os testes
pytest tests/ -v
# Rodar testes de um módulo específico
pytest tests/test_edos.py -v
# Com saída detalhada
pytest tests/ -v --tb=shortPara contribuir com novos testes, siga estas diretrizes:
"""Testes para o módulo `codigos.modulo`.
Descrição breve do que o teste cobre."""
import numpy as np
import pytest
from codigos import modulo
def test_nome_descritivo():
"""Descrição do que o teste verifica."""
# Arrange (preparar dados)
entrada = valor_esperado
# Act (executar função)
resultado = modulo.funcao(entrada)
# Assert (verificar resultado)
assert resultado == valor_esperadodef test_conversao_base10_para_base2():
"""Testa conversão de decimal para binário."""
from codigos.bases import base10_para_base2
# Teste básico
assert base10_para_base2(10) == "1010"
# Teste com zero
assert base10_para_base2(0) == "0"
# Teste com potência de 2
assert base10_para_base2(16) == "10000"def test_integracao_numerica_trapezio():
"""Testa regra do trapézio com função conhecida."""
from codigos.integracoes import trapezio
# ∫[0,1] x² dx = 1/3 ≈ 0.3333
resultado = trapezio('x**2', 0, 1, 1000)
# Tolerância relativa para cálculos numéricos
assert abs(resultado - 1/3) < 1e-6def test_entrada_invalida_levanta_excecao():
"""Testa se entradas inválidas levantam exceções apropriadas."""
from codigos.raizes import bisseccao
# Deve levantar ValueError para intervalo inválido
with pytest.raises(ValueError):
bisseccao('x**2 - 1', 2, 1, 1e-6, 100) # a > b# Testes do módulo específico
pytest tests/test_modulo.py -v
# Testes com cobertura
pytest tests/ --cov=codigos --cov-report=html
# Testes em modo watch (re-executa automaticamente)
pytest-watch tests/tests/
├── test_bases.py # Testes para bases.py
├── test_sistemaslineares.py # Testes para sistemaslineares.py
├── test_interpolacoes.py # Testes para interpolacoes.py
├── test_integracoes.py # Testes para integracoes.py
├── test_edos.py # Testes para edos.py
├── test_raizes.py # Testes para raizes.py
└── test_ajustecurvas.py # Testes para ajustecurvas.py
O projeto utiliza GitHub Actions para integração contínua:
| Workflow | Status | Descrição |
|---|---|---|
| CI Pipeline | Testes, linting e validação | |
| Docs Deploy | Build e deploy da documentação |
Para visualizar o histórico completo de builds e detalhes dos testes:
Este repositório inclui um arquivo LICENSE.