# **Propagação de erros em Python3: Jupyter Notebook - Data analytics**

## *Subprojeto "Protótipo de Magnetômetro Portátil com Internet das Coisas" (Computação Física) da UFES/Alegre*

### Eduardo Destefani Stefanato, IC FAPES
### Professor : Roberto Colistete Jr., em 05/02/2021.

__________________________________

### O que é propagação de erros/incerteza?

Em estatística, propagação de incerteza ou propagação de erro (ambas diferem na forma de apresentar seus valores) é uma forma de verificar a confiabilidade dos dados de uma certa amostra ou medida, quando esta é submetida a diferentes operações matemáticas. Ela define como as incertezas ou erros das variáveis estão relacionadas e fornece a melhor estimativa para aquele conjunto de dados.

Incerteza é uma quantidade (dimensional ou adimensional) que expressa a confiabilidade de um conjunto de dados, dada a sua dispersão, independentemente do valor verdadeiro. A entidade máxima para os padrões de medidas de incerteza é o Escritório Internacional de Pesos e Medidas (BIPM).

Erro é a diferença entre o valor de uma certa medida e o seu valor verdadeiro.

#### Importação dos módulos Python para o programa


```python
# Data sat
from sympy import *
```

#### Desenvolvimento

Classe de calculos das derivadas parciais e listas de erros (incertezas):


```python
class uncertz :
    
    def __init__(self, name) :
        self.name = name

    def grad(*vartuple) :
        diff_func = []
        func = input('\nFunção: ')
        for i in vartuple :
            i = Symbol('{}' .format(i))
            diff_func.append(diff(func, i))
            
        return diff_func[1:]
    
    def error(*errtuple) :
        err_func = []
        for i in errtuple :
            err_func.append(i)
            
        return err_func[1:]
```

A celula a seguir possui o formulário que deve ser preenchido pelo usuário no cálculo da incerteza da função desejada: 


```python
f = uncertz(input('Nome da função: '))

loop = True
while loop :
    try:
        qt_gran = int(input('\nNúmero de grandezas: '))
        loop = False
    except ValueError:
        loop = True
        print('Você não digitou um número inteiro.')

count = 0
lst_var = []
for i in range(qt_gran) :
    count += 1
    i = input('Variável {}: '. format(count))
    lst_var.append(i)
    
print('\n')
count = 0
lst_err = []
for i in range(qt_gran) :
    count += 1
    i = float(input('Incerteza da variável {}: '. format(count)))
    lst_err.append(i)
    
count = 0
lst_val = []
for i in range(qt_gran) :
    count += 1
    i = float(input('Valor da variável {}: '. format(count)))
    lst_val.append(i)

vartuple = tuple(lst_var)
errtuple = tuple(lst_err)
valtuple = tuple(lst_val)
    
dict_data = {}
for var, val in list(zip(vartuple, valtuple)):
    dict_data[var] = val

grad = f.grad(*vartuple)
error = f.error(*errtuple)

BIMP = prod_int = sqrt(sum(tuple(map(lambda a,b: (a*b)**2, grad, error))))    
BIMP = BIMP.subs(dict_data); print('\n+/-', BIMP.round(2))
```

    Nome da função:  Momento
    
    Número de grandezas:  2
    Variável 1:  m
    Variável 2:  v


    
    


    Incerteza da variável 1:  0.01
    Incerteza da variável 2:  0.2
    Valor da variável 1:  89
    Valor da variável 2:  0.8
    
    Função:  m*v


    
    +/- 17.80


Fonte: [Propagação de erros](https://pt.wikipedia.org/wiki/Propaga%C3%A7%C3%A3o_de_erros)
End.
df6fc10f76b7b0158308f7a0d20152f3e829210e
ipynb
Jupyter Notebook
uncertz/source-code/uncertz_v0.1.ipynb
EduardoDestefani/python-samples
91affdafe61bd1f5d55cb801a18969657e73177f
MIT
uncertz/source-code/uncertz_v0.1.ipynb
EduardoDestefani/python-samples
91affdafe61bd1f5d55cb801a18969657e73177f
MIT
uncertz/source-code/uncertz_v0.1.ipynb
EduardoDestefani/python-samples
91affdafe61bd1f5d55cb801a18969657e73177f
MIT
Qwen/Qwen-72B
1. YES
2. YES