Código-fonte para codigos.calcnum

"""
Módulo principal do projeto de Cálculo Numérico.

Este módulo fornece uma interface interativa unificada para todos os
algoritmos implementados: conversões de bases, sistemas lineares,
interpolação, ajuste de curvas, integração e EDOs.

Author: Pedro Henrique Rocha de Andrade
Date: Dezembro 2025
"""

import numpy as np
from sympy import symbols, integrate, sympify
from sympy import sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, exp, sqrt, log, Abs, pi, E
from .constants import SYMPY_LOCALS


"""

Projeto de Cálculo Numérico:
Autor: Pedro Henrique Rocha de Andrade
Orientador: Rodrigo Lacerda da Silva
Ano Início: 2025.2

Ideia: Reunir os códigos em um pacote, tornar público para o instituto e auxiliar os alunos a melhor compreender a lógica de programação resolvendo problemas de cálculo, álgebra e computação.
Apresentar ao instituto futuramente. 

Github: https://github.com/pedroiff0/CalculoNumerico
Paper: 
Documentação:
Tutoriais:

% pip3 install calculonumiff

"""

"""
Sistema de Conversão de Bases - Parte 0 (Teórica)

    Funções:
    - binario_para_decimal(s)
    - decimal_para_binario(n)
    - decimal_para_hexadecimal(n)
    - hexadecimal_para_decimal(s)
    - binario_para_hexadecimal(s)
    - hexadecimal_para_binario(s)
"""

from codigos.bases import (
    dados as dados_bases,
    binario_para_decimal,
    decimal_para_binario,
    decimal_para_hexadecimal,
    hexadecimal_para_decimal,
    binario_para_hexadecimal,
    hexadecimal_para_binario,
)





"""

Sistemas Lineares - Parte 1

    Funções:
    - eliminacao_gauss_sem_pivotamento(A, b)
    - eliminacao_gauss_com_pivotamento(A, b)
    - lu_sem_pivot(A,b)
    - lu_com_pivot(A,b)
    - forward_solve(L, b)
    - backward_solve(U, y)
    - calcular_residuo(A, x, b)
    
    Funções Auxiliares:
    - imprimir_sistema_linear()
    - montar_sistema_valores() # (pedir dados ao usuario)
    - exibir_residuo_detalhado(A, x, b)
    - matriz_zeros_manual(n) # opcional
    - multiplicar_matrizes(A, B) # opcional
    - matriz_identidade(n) # opcional
"""

from codigos.sistemaslineares import (
    eliminacao_gauss_sem_pivotamento,
    eliminacao_gauss_com_pivotamento,
    lu_sem_pivot,
    lu_com_pivot,
    montar_sistema_valores,
    forward_solve,
    backward_solve,
    calcular_residuo,
    exibir_residuo_detalhado,
)






"""
Interpolações - Parte 2

    Funções:
    - newton_dif_divididas(x, tabela, xp, max_grau=None)
    - gregory_newton_progressivo(x, y, xp, max_grau=None)
    - lagrange_interpol(x, y, xp, max_grau=None)
    - dispositivo_pratico_lagrange(x, y, xp, max_grau=None)
    - calcular_erro(func_str, x_vals, x_interp, grau, valor_interpolado)
    
    Funções Auxiliares:
    - dados_interpolacao()
    - obter_max_grau(n):
    - verifica_espaçamento_uniforme(x, tol=1e-15)
    - tabela_diferencas_divididas(x, y)
    - imprimir_tabela_diferencas_divididas(tabela)
    - tabela_diferencas_finitas(y)
    - imprimir_tabela_diferencas_finitas(tabela)
    - perguntar_erro(x_vals, x_interp, grau, valor_interpolado)
    
"""

from codigos.interpolacoes import (
    newton_dif_divididas,
    gregory_newton_progressivo,
    lagrange_interpol,
    dispositivo_pratico_lagrange,
    dados_interpolacao,
    obter_max_grau,
    verifica_espaçamento_uniforme,
    tabela_diferencas_divididas,
)




"""
Ajustes de Curvas - Parte 3

    Funções:
    - regressaolinear(x, y) # opcional!
    - regressaolinear_intervalo(x, y) # opcional!
    - minquadrados(x, y)
    - minquadrados_ordem_n_manual(x, y, ordem=1, tabela=True, grafico=True)
    - calcula_chi_e_r2(x, y, b0, b1, n_params=2)
    
    Funções Auxiliares:
    - log_output(message, logfile='log_resultados.txt') # opcional
    - dados() # especificamente  (pode ser para Interpolações e Ajustes de Curvas)
    - tabela_interpolador(x, y, p1x) # opcional
    - tabela_minimos_quadrados(x, y) # opcional

"""

from codigos.ajustecurvas import (
    regressaolinear,
    regressaolinear_intervalo,
    minquadrados,
    minquadrados_ordem_n,
    dados as dados_ajustes,
)





"""
Ajustes de Curvas - Parte 3

    Funções:
    - regressaolinear(x, y) # opcional!
    - regressaolinear_intervalo(x, y) # opcional!
    - minquadrados(x, y)
    - minquadrados_ordem_n_manual(x, y, ordem=1, tabela=True, grafico=True)
    - calcula_chi_e_r2(x, y, b0, b1, n_params=2)
    
    Funções Auxiliares:
    - log_output(message, logfile='log_resultados.txt') # opcional
    - dados() # especificamente  (pode ser para Interpolações e Ajustes de Curvas)
    - tabela_interpolador(x, y, p1x) # opcional
    - tabela_minimos_quadrados(x, y) # opcional

"""

from codigos.integracoes import (
    pedir_dados_integral,
    trapezio_composta,
    simpson_1_3_composta,
    simpson_3_8_composta,
    trapezio_tabela,
    simpson_1_3_tabela,
    simpson_3_8_tabela,
    newton_cotes,
)





"""
Ajustes de Curvas - Parte 3

    Funções:
    - regressaolinear(x, y) # opcional!
    - regressaolinear_intervalo(x, y) # opcional!
    - minquadrados(x, y)
    - minquadrados_ordem_n_manual(x, y, ordem=1, tabela=True, grafico=True)
    - calcula_chi_e_r2(x, y, b0, b1, n_params=2)
    
    Funções Auxiliares:
    - log_output(message, logfile='log_resultados.txt') # opcional
    - dados() # especificamente  (pode ser para Interpolações e Ajustes de Curvas)
    - tabela_interpolador(x, y, p1x) # opcional
    - tabela_minimos_quadrados(x, y) # opcional

"""

from codigos.edos import (
    resolver_edo_2ordem,
    executar_runge_kutta,
    executar_sistema_edos,
)





"""
Ajustes de Curvas - Parte 3

    Funções:
    - regressaolinear(x, y) # opcional!
    - regressaolinear_intervalo(x, y) # opcional!
    - minquadrados(x, y)
    - minquadrados_ordem_n_manual(x, y, ordem=1, tabela=True, grafico=True)
    - calcula_chi_e_r2(x, y, b0, b1, n_params=2)
    
    Funções Auxiliares:
    - log_output(message, logfile='log_resultados.txt') # opcional
    - dados() # especificamente  (pode ser para Interpolações e Ajustes de Curvas)
    - tabela_interpolador(x, y, p1x) # opcional
    - tabela_minimos_quadrados(x, y) # opcional

"""

from codigos.raizes import (
    plotar_funcao,
    bissecao,
    newton,
    secante,
    pedir_dados_raizes,
)







if __name__ == '__main__':
    menu_principal()

[documentos] def main(): menu_principal()