Introdução à Programação em Python

(1) Exercícios introdutórios

Carlos Caleiro, Jaime Ramos

Dep. Matemática, IST - 2016

(versão de 22 de Setembro de 2016)

Introdução

O IPython (agora integrado no projecto Jupyter) é um ambiente interactivo para a utilização livre da linguagem Python como ferramenta de cálculo e visualização, bem como para o desenvolvimento de (pequenos) programas na linguagem Python e sua prototipagem rápida. No modo Notebook a interacção dá-se através de um interface muito simples suportado por um browser, que por sua vez comunica com um kernel que disponibiliza um interpretador de Python. É neste modo que iremos trabalhar.

Cada "Notebook" está organizado em células. Cada célula tem associado um tipo (texto, input, ouput, gráficos, etc.). As células de input podem avaliar-se premindo simultaneamente as teclas "shift" e "return", o que inicia a necessária comunicação com o "Kernel".

Para começar, inicie o Jupyter, criando um Notebook novo. Avalie a expressão 1+1 e confirme que obtém o resultado esperado.

Cálculo numérico

Recorde as operações aritméticas básicas do Python: + (adição), - (subtracção), * (multiplicação), / (divisão), ** (exponenciação), // (divisão inteira), % (resto da divisão inteira).

Avalie as expressões:

  • $2^{1000}$
  • $45+2\times3$
  • $(45+2)\times3$
  • $72\div3+3$
  • resto da divisão inteira de 25 por 3
  • resto da divisão inteira de 25 por 5

Calule agora sin(pi/2).

Para se poder avaliar a expressão anterior é necessário usar extensões à linguagem. Neste caso, recomenda-se a utilização da extensão pylab que pode ser importada através do comando seguinte.

In [1]:
%pylab inline
Populating the interactive namespace from numpy and matplotlib

Volte a avaliar a expressão anterior.

Podemos obter informação sobre a constante sin através da função help (ou ?).

Avalie as expressões seguintes.

  • $\sin(\pi/2)-1$
  • $\sin(\pi/2)-\frac{\sqrt{2}}{2}$

Números complexos

A unidade imaginária em Python é representada pelo símbolo j, disponibilizado pela extensão pylab.

Calcule os sequintes números:

  • $i^2$
  • $(2+3i)+2i$
  • $(5+2i)i$
  • $(5+2i)(2+3i)$

Recorde as funções real e imag. Calcule a parte real e a parte imaginária dos números complexos:

  • $i^2$
  • $(5+2i)i$
  • $(5+2i)(2+3i)$

Recorde as funções abs e conjugate. Calcule o módulo e o conjugado dos números complexos:

  • $i**2$
  • $(5+2i)(2+3i)$

Vectores e matrizes

Recorde-se que a manipulação de vectores e matrizes é disponibilizada pela extensão pylab. Recorrendo à função arange defina os vectores seguintes.

  • $[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]$
  • vector dos números pares entre 2 e 20
  • vector dos múltiplos de 3 entre -3 e 10

Calcule o produto interno entre o vector $[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]$ e o vector dos números pares entre 2 e 20.

Recorde as operações aritméticas usuais sobre matrizes. Avalie as seguintes expressões:

  • $2*\left[\begin{array}{c}1 & 5 & 7\\ 2 & 4 & 6\end{array}\right]$
  • $\left[\begin{array}{c}4 & 8\\ 1 & 3\end{array}\right]+ \left[\begin{array}{c} 1 & 2\\ 2 & 3\end{array}\right]$
  • $\left[\begin{array}{c}4 & 8 & 2\\ 1 & 3 & 5\end{array}\right]* \left[\begin{array}{c} 2 & 0 \\ 1 & 3\\ 7 & 2\end{array}\right]$

Recorde as operações sobre matrizes zeros, ones, eye e reshape. Recorrendo a estas operações e às operações aritméticas defina as seguintes matrizes.

  • $\left[\begin{array}{c}2 & 2 & 2\\ 2 & 2 & 2\end{array}\right]$
  • $\left[\begin{array}{c}3 & 3 & 3\\ 3 & 3 & 3 \\ 3 & 3 & 3\end{array}\right]$
  • $\left[\begin{array}{c}4 & 0 & 0\\ 0 & 4 & 0 \\ 0 & 0 & 4\end{array}\right]$
  • $\left[\begin{array}{c}2 & 1 & 1\\ 1 & 2 & 1 \\ 1 & 1 & 2\end{array}\right]$
  • $\left[\begin{array}{c}5 & 1 & 1\\ 1 & 5 & 1 \\ 1 & 1 & 5\end{array}\right]$
  • $\left[\begin{array}{c}0 & 1 & 1\\ 1 & 0 & 1 \\ 1 & 1 & 0\end{array}\right]$
  • $\left[\begin{array}{c}1 & 4 & 7\\ 10 & 13 & 16 \\ 19 & 22 & 25\end{array}\right]$

Polinómios

O Python dispõe de uma colecção de funções para manipular polinómios. A representação de um polinómio faz-se através um vector em que os coeficientes do polinómio surgem ordenados do mais significativo para o menos significativo. Por exemplo, o polinómio $x^2-2x+3$ é representado pelo vector:

In [2]:
array([1,-2,3])
Out[2]:
array([ 1, -2,  3])

É interessante explorar as operações roots, poly e polyval para manipulação de polinómios, e que ainda não tínhamos abordado.

A operação roots permite encontrar as raízes de um polinómio:

In [54]:
roots(array([1,-2,-3]))
Out[54]:
array([ 3., -1.])

Reciprocamente, a operação poly permite obter os coeficientes de um polinómio a partir das suas raízes. Por exemplo, para determinar o polinómio cujas raízes são 3 e -1 basta avaliar:

In [55]:
poly(array([3,-1]))
Out[55]:
array([ 1., -2., -3.])

Para calcular o valor de um polinómio num ponto ou num conjunto de pontos recorre-se à função polyval. Relativamente ao polinómio anterior, podemos determinar o seu valor no ponto 4 avaliando:

In [56]:
polyval(array([1,-2,-2]),4)
Out[56]:
6

Com base nas operações anteriores,

  • determine as raízes dos polinómios:
    • $x^4+2x^3-3x^2-4x+4$
    • $x^2+1$
  • determine o polinómio definido pelas seguintes raízes:
    • $x_1=3$ e $x_2=-3$
    • $x_1=2$, $x_2=-2$ e $x_3=0$

Cálculo simbólico

Comece por importar a extensão sympy.

In [61]:
from sympy import *

Defina os símbolos a, b, c, d, x e y. Avalie a expressão $(a/b-c/d)^2$; expanda-a. Sugestão: utilize a função pprint para tornar a apresentação dos resultados mais agradável.

Avalie a expressão sen(x)/cos(x); simplifique-a.

Calcule a derivada (em ordem a $x$) da expressão $\log(x)+x$.

Calcule a derivada (em ordem a $x$) das expressões $a(x)+b(x)$ e $a(x)b(x)$.

Calcule a primitiva das expressões $x^2+x$, $\cos(x)$ e $\arctan(x)$.

Calcule o integral da função com expressão analítica $x^2+x$ no intervalo $[-2,2]$.

Calcule os seguintes limites:

  • $\lim_{x\to0} \frac{\sin(x)}{x}$
  • $\lim_{x\to0} \frac{\cos(x)-1}{x}$

Gráficos

Desenhe o gráfico da função com expressão analítica $3x-1$ no intervalo $[-2,2]$.

Desenhe o gráfico da função com expressão analítica $5x^2-x+2$ no intervalo [−10,20].

Importe a função plot3d e consulte a informação disponibilizada para essa função.

In [78]:
from sympy.plotting import plot3d

Desenhe os gráfico da função com expressão analítica $\cos(x^2+y^2)$ nos intervalos $[-1,1]\times [-1,1]$ e $[-2,2]\times[-2,2]$.

Desenhe o gráfico da função $f(x)=\frac{\sin(\sqrt{x^2+y^2})}{\sqrt{x^2+y^2}}$ no intervalo $[-10,10]\times [-10,10]$.

Estudo de uma função

Considere a função real de variável real definida por $f(x)=\cos(x)\sin(3x/2)/x$.

Desenhe o gráfico de $f$ no intervalo $[-8\pi,8\pi]$.

Calcule os limites de $f$ quando x tende para $+\infty$ e $-\infty$.

Verifique que os limites de $f$ à esquerda e à direita do ponto 0 são ambos 3/2.

Calcule o valor da expressão da função derivada de $f$. Desenhe o gráfico da expressão no mesmo intervalo.

Solução de equações e inequações

Resolva as equações:

  • $x^3+x^2+x+1=0$
  • $x^3+2x^2+4x+3=0$

Resolva as inequações:

  • $x+1<0$
  • $x^2\geq1$
  • $x^2<0$
  • $x^2\leq0$

Obtenha a fórmula resolvente para equações do tipo:

  • $ax^2+bx+c=0$
  • $ax^3+bx^2+cx+d=0$
  • $ax^4+bx^3+cx^2+dx+e=0$

Embora não existam fórmulas resolventes para equações de grau superior a 4, é possível encontrar soluções para equações particulares. Tente obter a fórmula resolvente para equações do tipo $ax^5+bx^4+cx^3+dx^2+ex+f=0$. Resolva a equação $x^5+2x^2+4=0$.

Atribuição

É possível, frequente e desejável, associar nomes a valores, por forma a memorizá-los e ter um mecanismo simples para os referir. O mecanismo de associação de um nome a um valor é conhecido por atribuição. Aos nomes também é usual chamar variáveis.

Atribui-se à variável k o valor 3.5 da seguinte forma.

In [101]:
k=3.5

Atribua à variável m o valor 8. Verifique o valor das variáveis k e m.

Calcule o logaritmo de $k\times m$.

Obtenha informação sobre as variáveis k e m.

Apague o valor memorizado em k. Verifique que foi efectivamente apagado.

Apague completamente a variável k. Verifique que foi completamente apagada.

Atribua a True o valor 2.

Expressões Booleanas

Atribua às variáveis x, y e z os valores 3, 5 e 0, respectivamente. De seguida avalie as expressões Booleanas seguintes:

  • $x\geq2 \wedge y=7$
  • $x=3 \wedge z<1$
  • $x>0 \vee z<3$
  • $\neg(x>0 \wedge y=5 \wedge z<0)$
  • $2 x

Escrita de resultados

Apresente no Output a string "pi = " seguida do valor numérico de $pi$.

Apresente no Output a string "a variável y tem o valor " valor de y " e a variável x tem o valor " valor de x ".".

Definição de funções

Define-se uma função de nome $f$ com parâmetros formais $x$ e $y$, cuja expressão de cálculo é $\frac{\sin(x)\cos(y)}{x^y}$, muito simplesmente usando a seguinte declaração.

Determine o valor que $f$ devolve quando:

  • $x=\pi$ e $y=0$
  • $x=2\pi/3$ e $y=\pi/4$

Desenhe o gráfico da função $f$ no intervalo $[1,2]\times[1,2]$.

Defina uma função $g$ com parâmetros formais $x$ e $y$, definida pela expressão $\frac{f(x,y)}{(xy)^6}$.

Desenhe o gráfico da função $g$ no intervalo $[\pi/2,3\pi/2]\times[\pi,2\pi]$.