



































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Uma introdução à programação em python, abordando conceitos básicos como variáveis, tipos de dados, operadores e estruturas de controle. Além disso, explora métodos numéricos como o método da bisseção, o método da secante e o método de newton-raphson para encontrar raízes de funções. O documento inclui exemplos práticos de código em python para ilustrar os conceitos e métodos discutidos.
Tipologia: Notas de aula
1 / 43
Esta página não é visível na pré-visualização
Não perca as partes importantes!




































Aritmética Computacional, apresentação dos erros comuns na linguagem Python e métodos clássicos de obtenção de raízes de funções não lineares.
Prof. Francisco Roberto da Rocha Gomes
Entender a aritmética computacional como ferramenta essencial para os profissionais que utilizaram programação para resolver problemas de modelagem matemática e os possíveis erros que podem ocorrer na execução de algoritmos em uma linguagem específica.
Para compreender os conceitos abordados, é necessário prévio conhecimento básico da linguagem Python.
Reconhecer os conceitos básicos da linguagem Python. Aplicar os recursos do Python na Aritmética Computacional. Distinguir os principais tipos de erros computacionais. Calcular zeros de funções não lineares utilizando Python.
Este conteúdo não é um manual abrangente de Python. O único objetivo é fornecer informações fiáveis para lhe dar um bom começo, se você não estiver familiarizado com Python. Se você conhecer outra linguagem de computador, e presumimos que sim, não é difícil que compreenda conforme avança.
Os programas Python não são compilados em código de máquina, mas são executados por um interpretador. A grande vantagem de uma linguagem interpretada é que os programas podem ser testados e depurados rapidamente, permitindo que o usuário se concentre mais nos princípios por trás do programa e menos na programação em si. Não há necessidade de compilar, vincular e executar após cada correção. Programas Python podem ser desenvolvidos em muito menos tempo do que os programas Fortran ou C equivalentes.
O interpretador Python pode ser facilmente encontrado para ser baixado no site oficial. Normalmente, vem com um bom editor de código chamado Idle, que permite a você executar programas diretamente do editor. Se você usa Linux, é muito provável que o Python já esteja em paralisado em sua máquina. O download inclui dois módulos de extensão que usamos em nossos programas: o módulo numpy, que contém várias ferramentas para operações de array, e o módulo gráfico matplotlib, utilizado na plotagem.
v0 = 5 # Velocidade inicial
Essa linha é uma atribuição de variável, ou seja, toda a vez que aparecer v0, o Python vai entender que é uma representação de 5m/s. Uma maneira simples de entender o que é atribuição seria pensar que o Python gera uma "caixa" no computador (memória) com o nome v0 escrito no topo. O número 5 é, então, colocado nessa caixa. Sempre que o Python, mais tarde, encontra o nome v0 no código, ele encontra a caixa, de modo que o Python tira o número cinco e substitui o nome v0 pelo número. Isso também acontece com as linhas seguintes: g = 10 e t = 0,5.
y = v0 * t - 0,5 * g * t ** 2 # Posição vertical
O Python já conhece três “caixas” com seus respectivos valores v0, g e t, então, a linha seguinte contém a fórmula do nosso modelo matemático: y = v0 * t - 0,5 * g * t ** 2. Novamente, de acordo com suas regras, Python interpreta * como multiplicação, - como menos e ** como exponenciação. O Python executa a matemática e atribui o resultado (neste caso, o número 1,25) à variável de nome y.
print(y)
Na última linha, vem o comando print(y), que é um comando de impressão na tela do valor de y, pois, caso não seja colocado essa função print, o Python executaria a fórmula e atribuiria na “caixa” y o valor de 1,25 e nada aparecia na tela.
Vamos falar um pouco sobre o termo atribuição de variáveis. Observe que utilizamos o operador = para atribuir um valor numérico a uma representação, como no exemplo v0, t e g. Nesse ponto, a linguagem de programação difere da linguagem matemática. Para exemplificar essa diferença, usaremos a expressão x= 4- x. Veja o que essa expressão significa em cada caso:
Nas próximas seções, serão apresentados alguns comandos e estruturas básicas do Python, lembrando que as seções não são um aprofundamento da linguagem Python, mas o básico para começarmos a trabalhar com a modelagem matemática.
Agora, vamos tratar de recursos adicionais da linguagem para apoiar o desenvolvimento dos códigos: os strings. O Python usa a tabela de caracteres, que depende do seu sistema operacional, como, por exemplo, ASCII e UTF-8. Os strings são colocados entre aspas simples (‘) ou duplas (“) e os caracteres que são não imprimíveis podem ser expressos com a “barra-invertida” (). Seguem alguns exemplos:
Matemática
É uma simples equação, onde a variável x = 2.
Programação
É necessário saber qual é o valor x do lado direito, subtraí-lo de 4 e atribuir esse resultado a x do lado esquerdo. Geralmente, isso acontece em processos iterativos.
Cria uma nova linha.
Cria uma tabulação.
É uma backspace.
Vejamos exemplos de aplicação:
python
print('abc\nd') abc d
python
print('abc\td') abc d
É possível obter o endereço dos caracteres dos strings usando a notação de índices, string[índice], observando que, para o Python, o primeiro caractere tem índice 0 e o último tem índice -1. Vejamos alguns exemplos:
python
palavra = “abcd” palavra[0] a palavra[-1] d
Podemos também fatiar (slices) um string com a notação string[índiceI:índiceF]. Com esse comando, o Python nos retorna os caracteres, iniciando com o caractere de índiceI (inclusive) e finalizando com o caractere que fica antes do indiceF. Isso acontece, pois o indiceF é exclusivo. Por exemplo:
python
palavra[0:2] ab
Observe que o caractere correspondente ao índice 2 não apareceu.
Expressões Booleanas
São utilizados para realizar comparações relacionais e retornam verdadeiro (True) e falso (False). Os operadores são:
No Python, podemos utilizar as operações aritméticas usadas na matemática básica. Veja alguns exemplos dos operadores que o Python suporta:
A tupla é uma sequência de objetos arbitrários separados por vírgulas e incluídos entre parênteses. Se a tupla contém um único objeto, uma vírgula final é necessária; por exemplo, x = (2,). Tuplas suportam as mesmas operações que strings e são imutáveis. Veja a seguir um exemplo onde a tupla dados contém outra tupla (31,10,73):
python
dados = ('Gomes', 'Roberto', (31,10,73)) # Esta é uma tupla sobrenome, nome, data_de_nascimento = dados # Descompactando a tupla print(nome) Roberto Ano_de_nascimento = data_de_nascimento [3] print(Ano_de_nascimento) 73 nome_competo = dados [1] + '' + dados [0] print(nome_completo) Roberto Gomes print(rec [0: 2]) ('Gomes', 'Roberto')
Uma lista é semelhante a uma tupla, mas é mutável, de modo que seus elementos e comprimento podem ser mudados. Uma lista é identificada colocando-a entre colchetes. Seguem alguns exemplos da operações realizadas em listas:
python
a = [1.0, 2.0, 3.0] # Crie uma lista a.append (4.0) # Anexar 4.0 à lista print(a) [1,0, 2,0, 3,0, 4,0] a.insert (0,0.0) # Insira 0.0 na posição 0 print(a) [0,0, 1,0, 2,0, 3,0, 4,0] print(len (a)) # Determine o comprimento da lista 5 a [2: 4] = [1.0, 1.0, 1.0] # Modifica os elementos selecionados print(a) [0.0, 1.0, 1.0, 1.0, 1.0, 4.0]
Sea for um objeto mutável, como uma lista, a instrução de atribuição b = a não resulta em um novo objetob, mas, simplesmente, cria uma nova referência paraa. Portanto, quaisquer mudanças feitas para b serão refletidas ema. Veja, a seguir, um exemplo:
python
a = [1.0, 2.0, 3.0] b = a b[0] = 5. print(a) [5.0, 2.0, 3.0]
Lançamento oblíquo.
Para criar uma cópia independente de uma lista a, use a declaração c =a[:], conforme mostrado no exemplo a seguir:
python
c = a[:] c[0] = 1. print(a) [5.0, 2.0, 3.0]
No vídeo a seguir, apresentamos os principais comandos em Python na prática.
Acesse a versão digital para assistir ao vídeo.
Importando Bibliotecas
Para dar uma visão aplicada ao nosso estudo, começaremos com o problema clássico de física do ensino médio, que é o lançamento oblíquo, ou seja, quando um objeto inicia seu movimento formando um determinado ângulo com a horizontal. Nesse tipo de lançamento, o objeto executa dois movimentos simultâneos, um na vertical e outro na horizontal.
Não precisaremos recapitular todo o assunto, já visto no ensino médio, para que o objetivo deste conteúdo seja atingido.
A bala de um canhão, com massa (m) de 15kg, é lançada com velocidade inicial (v0) de 300m/s. Determine o alcance horizontal máximo (A) do projétil para o caso de o ângulo (θ) formado entre o canhão e a horizontal ser de 15°. Considere a gravidade (g) igual a 10m/s.
Dos resultados do ensino médio, utilizaremos a fórmula de alcance máximo para o lançamento oblíquo, dada por:
python
import math v0 = g= theta= A= (v02/g)math.sin(2theta*math.pi/180) print(A) 4500
O resultado obtido é A = 4500.
Em nosso problema inicial, essa forma de “chamar” as funções do módulo sem utilizar o prefixo ficaria:
python
from math import sin, pi v0 = g= theta= A= (v02/g)sin(2theta*pi/180) print(A)
Caso seja necessário utilizar todas as funções da biblioteca, basta usar o comando from módulo import *. Veja o exemplo:
python
from math import * v0 = g= theta= A= (v02/g)sin(2theta*pi/180) print(A)
O Python permite que importemos um módulo e atribuamos a ele um “apelido”, para utilizar como prefixo ao chamar uma função. O comando é import módulo as “apelido”. Desse modo, quando utilizar uma função da biblioteca, basta usar o seguinte formato: apelido.função(). Por exemplo:
python
import math as m v0 = g= theta= A= (v02/g)m.sin(2theta*m.pi/180) print(A)
Observe que o apelido será m; assim, chamamos a função seno com m.sin(). De maneira análoga, podemos atribuir “apelidos” para as funções from módulo import função as apelido. Por exemplo:
python
from math import cos as c, sin as s print(c(0) + s(0))
Até agora, vimos sobre biblioteca de funções, módulos, parâmetros, utilizando, no entanto, o que o Python já tem pronto. É possível também criar a nossa própria função e seus respectivos argumentos. Essa necessidade geralmente ocorre quando algum procedimento se repete no programa. Por exemplo, vamos supor que em um problema você tenha que calcular diversos alcances de um lançamento oblíquo para diversos ângulos, respectivamente, 15º, 30º, 45º, 60ºe 75º, usando esse programa.
python
import math v0 = g= theta=
print(A)
Uma solução para isso é criar uma função, e a estrutura para declarar uma função em Python é dada da seguinte maneira:
def nome.Da.Minha.Função(Argumentos1, Argumentos2,….Argumentosn):
Declarações
return valor-de-retorno
A seguir, apresentaremos formas de executar procedimentos condicionados e recursivos, que são importantes e comuns em funções.
A construção de uma estrutura de condicionais no Python é dada por:
if condições:
bloco de instruções
elif condições:
bloco de instruções
else:
bloco de instruções
O exemplo a seguir é uma aplicação da estrutura if, onde o script decide se o número é positivo, negativo ou zero:
python
for i in range(1,7): print(i) 1 2 3 4 5 6
Agora, vamos retornar ao nosso problema anterior, ou seja, calcular diversos alcances de um lançamento oblíquo para diversos ângulos, por exemplo: 15º, 30º, 45º, 60ºe 75º. Uma maneira de resolver esse problema é:
python
import math def Alcance(V0,theta,g): return (v02/g)math.sin(2theta*math.pi/180) v0= theta = [15,30,45,60,75] n=len(theta) A =[] for i in range(len(theta)): A.append(Alcance(v0,theta[i],10)) print(A) 4499.999999999999, 7794.228634059948, 9000.0, 7794.2286340599485, 4499.
Como fazer gráficos com o módulo matplolib.pyplot
Vamos retornar ao nosso problema do início do conteúdo, ou seja: determinar a posição vertical y da bola no tempo t. Para construir o gráfico dessa função, utilizaremos o módulo matplotlib, usado, em geral, para realizar gráficos em 2D.
python
import numpy as np import matplotlib.pyplot as plt v0 = 5 # Velocidade inicial g = 10 # Aceleração da gravidade t = np.linspace(0,1,1001)# Tempo y = v0 * t - 0.5 * g * t ** 2 # Posição vertical plt.plot(t,y) # plotar o grafico yxt plt.xlabel('t (s)') # eixo x com t(s) plt.ylabel('y (m)') # eixo y como y(m) plt.show() #mostrar a figura
Como saída, o Python apresenta o seguinte gráfico:
Gráfico: Resultado gerado no matplotlib.pyplot.
No programa apresentado, temos que destacar 2 pontos:
A função linspace retorna um vetor e a construção genérica dele é linspace(a,b,n), onde gera um vetor no intervalo [a,b] e com n pontos. Quando utilizamos t como vetor, a função da altura y(t) torna-se também um vetor.
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.
Utilização de uma IDL Python ( Jupyter)
Acesse a versão digital para assistir ao vídeo.
Construir gráficos com Python
Acesse a versão digital para assistir ao vídeo.
Verificando o aprendizado
Questão 1
Calcule o valor da expressão escrita em Python – (9*4 +2)6 - 1.
Em uma lista, os índices começam com 0. Nesse caso, a lista segue a ordem até 4. Quando utilizamos índices negativos, ele usa a ordem inversa, começando com -1 e indo até -5, ou seja, a[-5] = 1.
Representação de números inteiros
A representação dos números inteiros positivos na base decimal ( 10 ) consiste em um número de algarismo (0,1,2,3,4,5,6,7,8,9), o qual depende da respectiva posição na representação.
O número 179 significa uma ( 1 ) centena ( 100 ) mais (+) sete ( 7 ) dezenas ( 10 ) e nove ( 9 ) unidades, ou, de forma simplificada, por símbolos matemáticos: 179 = 1x102 + 7x10 + 9.
Agora, vamos generalizar essa notação matemática. Para isso, vamos adotar como representação para qualquer digito numérico decimal a letra d (^) i , onde i é a posição no número N com n+1 dígitos. Por exemplo, no
número 179, o dígito decimal 1 encontra-se na posição i=2; 7 na posição i=1; e 9 na posição i=0. Em uma forma de notação matemática, temos:
Onde:
Outra notação comum para representar um número inteiro positivo na base 10 é (d (^) n d (^) n- 1 ....d (^) i ...d 1 d 0 ) 10. Essa
notação nos leva a outra, caso se deseje representar o número com uma base diferente de 10, que seria N=(d (^) nd (^) n- 1 ....d (^) i ...d 1 d 0 ) (^) b , com b sendo uma base diferente de 10; consequentemente, teremos 0≤ d (^) i < b.
As bases mais comuns na aritmética computacional são:
Para converter um número inteiro positivo N na base 10, para uma base b, é necessário determinar os seus respectivos dígitos: d (^) i , de (d (^) n d (^) n- 1 ....d (^) i ,...d 1 d 0 ) (^) b. Para entender o procedimento, devemos nos lembrar do
algoritmo da divisão de números inteiros positivos, onde, ao dividir um número D por um número d, obtém-se um quociente q e um resto r; e quando r=0, dizemos que a divisão foi exata e o resto só pode assumir os valores de 0,1,2...d-1. Formalizando por símbolos matemáticos:
Agora, vamos fazer a divisão de N, na base 10, pela base b que deseja se transformar. Dessa forma, D=N e d=b, sendo necessário descobrir quem será o q e o r. Lembrando o princípio da igualdade: se A=b, então, B=A. Podemos observar que, na mudança da base b para a base 10, temos:
Logo, pelo princípio da igualdade:
Se colocarmos b em evidência no n-1 primeiros termos da segunda parte da expressão, obtém-se:
Comparando com D=dxq +r, concluímos que:
Então, quando dividimos o número inteiro positivo N, na base 10, por um número b na base desejada, obtemos o resto r igual ao último digito d 0 da representação de N-decimal na base b. Sabemos, pelo exemplo anterior,
que 2605 = (A2D) 16 , onde a letra D é o ultimo dígito na representação da base 16; de fato, quando dividimos
2605 por 16, resulta, como quociente, q=162 e resto r=13, que, na representação na base 16, é a letra D.
Portanto, o processo adotado será dividir N por b e obter q 0 e r 0 = d 0 ; depois, divide-se q 0 por b, resultando
em q 1 e r 1 = d 1 , e assim sucessivamente; os respectivos restos serão os dígitos d (^) i , na base b, e o quociente da
n-ésima e última divisão será o d (^) n.
Binário
Define-se como bit (binary digit) o elemento de memória básico de um computador que assume dois estados, que são representados pelos dígitos zero ( 0 ) e um ( 1 ). O número de bits disponíveis para uma representação numérica de inteiros positivos corresponde ao maior inteiro que o computador pode representar, ou seja, com m bits é possível representar 2m números. Por exemplo, para representar os oito dígitos decimais, seriam necessários três bits, pois 23 = 8, entretanto, para representar 10 dígitos decimais são necessários quatro bits, pois 24 = 16 configurações, o que é excedente, ou seja, no sistema decimal há desperdício de bits.
A representação dos números inteiros não positivos é realizada utilizando a ideia do bit, ou seja, são convencionadas para os sinais positivo (+) ou negativo (-) as representações de zero ( 0 ) ou um ( 1 ). O único problema dessa representação ocorre em operações para obter os números +0 e -0, que, embora para o computador sejam números diferentes, sabemos que são iguais.
Existem diversas formas de resolver esse problema, mas não é o objetivo deste conteúdo.
Representação dos números reais
O número real 95,32, representado na base decimal ( 10 ), pode ser escrito da seguinte maneira:
Agora, vamos generalizar essa ideia: um número real r na base dez ( 10 ), com n+1 dígitos na parte inteira e m dígitos na parte fracionária, pode ser representado como: