Skip to content

Commit

Permalink
Merge pull request #287 from fazedo/master
Browse files Browse the repository at this point in the history
Basicamente correções textuais e atualizações. Também criei um script para extrair os exercícios do livro
  • Loading branch information
fazedo authored Mar 24, 2024
2 parents 3de1566 + c2afb47 commit 78cebd6
Show file tree
Hide file tree
Showing 15 changed files with 231 additions and 3,609 deletions.
46 changes: 24 additions & 22 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -328,35 +328,37 @@ clean:


exer-sci:
make clean
cp config-pdf-sci.knd config.knd
python3 extrai_exercicios.py
python3 extrai_exercicios.py sci
latex main
latex exercicios
latex exercicios_resolvidos
latex exercicios_todos
pdflatex exercicios
pdflatex exercicios_resolvidos
pdflatex exercicios_todos
latex exercicios-sci
latex exercicios_resolvidos-sci
latex exercicios_todos-sci
pdflatex exercicios-sci
pdflatex exercicios_resolvidos-sci
pdflatex exercicios_todos-sci

exer-py:
make clean
cp config-pdf-py.knd config.knd
python3 extrai_exercicios.py
python3 extrai_exercicios.py py
latex main
latex exercicios
latex exercicios_resolvidos
latex exercicios_todos
pdflatex exercicios
pdflatex exercicios_resolvidos
pdflatex exercicios_todos
latex exercicios-py
latex exercicios_resolvidos-py
latex exercicios_todos-py
pdflatex exercicios-py
pdflatex exercicios_resolvidos-py
pdflatex exercicios_todos-py

exer-oct:
make clean
cp config-pdf-oct.knd config.knd
python3 extrai_exercicios.py

python3 extrai_exercicios.py oct
latex main
latex exercicios
latex exercicios_resolvidos
latex exercicios_todos
pdflatex exercicios
pdflatex exercicios_resolvidos
pdflatex exercicios_todos
latex exercicios-oct
latex exercicios_resolvidos-oct
latex exercicios_todos-oct
pdflatex exercicios-oct
pdflatex exercicios_resolvidos-oct
pdflatex exercicios_todos-oct
1 change: 0 additions & 1 deletion cap_ajuste/cap_ajuste.tex
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ \chapter{Ajuste de curvas}\index{aproximação!de funções}\index{ajuste!por m
\ifispython
Ao longo deste capítulo, assumiremos que as seguintes bibliotecas e módulos \verb+Python+ estão carregadas:
\begin{verbatim}
>>> from __future__ import division
>>> import numpy as np
>>> from numpy import linalg
>>> import matplotlib.pyplot as plt
Expand Down
83 changes: 47 additions & 36 deletions cap_aritmetica/cap_aritmetica.tex
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
%Este trabalho está licenciado sob a Licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada. Para ver uma cópia desta licença, visite https://creativecommons.org/licenses/by-sa/3.0/ ou envie uma carta para Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

% !TEX root = ../main.tex
%\documentclass[main.tex]{subfiles}
%\begin{document}

Expand All @@ -13,22 +13,22 @@ \chapter{Representação de números e aritmética de máquina}\index{representa
% python
%%%%%%%%%%%%%%%%%%%%
\ifispython
Ao longo do capítulo, faremos alguns comentários usando códigos em \verb+Python 2.7+. Nestes, assumiremos que os seguintes módulos estão carregados:
Ao longo do capítulo, faremos alguns comentários usando códigos em \verb+Python+. Nestes, assumiremos que os seguintes módulos estão carregados:
\begin{verbatim}
>>> from __future__ import division
>>> import numpy as np
\end{verbatim}
A primeira instrução garante que divisões de números inteiros sejam computadas em ponto flutuante (\verb+double+) e a segunda carrega a biblioteca de computação científica \href{http://www.numpy.org/}{numpy}.
\fi
%%%%%%%%%%%%%%%%%%%%
\section{Sistema de numeração e mudança de base}\index{mudança de base}\index{sistema de numeração}
Usualmente, utilizamos o sistema de numeração decimal para representar números. Esse é um sistema de numeração posicional onde a posição do dígito indica a potência de $10$ que o dígito representa.
Usualmente, utilizamos o sistema de numeração decimal, isto é, base 10, para representar números. Esse é um sistema de numeração em que a posição do algarismo indica a potência de $10$ pela qual seu valor é multiplicado.

\begin{ex}
O número $293$ é decomposto como
\begin{equation}
\begin{split}
293 &= 2\ \text{centenas}+9\ \text{dezenas}+3\ \text{unidades}\\
293 &= 2\ \text{centenas} + 9\ \text{dezenas }+ 3\ \text{unidades}\\
&= 2\cdot 10^2+9\cdot 10^1+3\cdot 10^0.
\end{split}
\end{equation}
Expand Down Expand Up @@ -182,15 +182,26 @@ \section{Sistema de numeração e mudança de base}\index{mudança de base}\inde
%%%%%%%%%%%%%%%%%%%%
\ifispython
\begin{obs}
\verb+Python+ tem algumas sintaxes para representar números em algumas bases. Por exemplo, temos:
O \verb+Python+ tem preficos para representar números nas bases 2, 8 e 10. Por exemplo, temos:
\begin{verbatim}
>>> print(0b1001) #bin -> dec
>>> print(0b1001) # bin
9
>>> print(0o157) #oct -> dec
>>> print(0o157) # oct
111
>>> print(0xbeba) #hex -> dec
>>> print(0xbeba) # hex
48826
\end{verbatim}
Também é possível usar a função int() para interpretar a representação de um inteiro em uma base com b entre 2 e 36. Por exemplo, temos:
\begin{verbatim}
>>> print(int('1001', 2)) # Base 2
9
>>> print(int('1001', 5)) # Base 5
126
>>> print(int('ABCD', 20)) # Base 20
84653
>>> print(int('zz', 36)) # Base 36
1295
\end{verbatim}
\end{obs}
\fi
%%%%%%%%%%%%%%%%%%%%
Expand Down Expand Up @@ -301,13 +312,13 @@ \section{Sistema de numeração e mudança de base}\index{mudança de base}\inde
Em \verb+Python+, podemos usar os comandos \verb+int+ (truncamento) e a operação \verb+%+ (resto da divisão) para computar esta conversão da seguinte forma
\begin{verbatim}
>>> x = 9
>>> d0 = x%2; x = int(x/2); print("d0 = %d, x = %d" % (d0,x))
>>> d0 = x%2; x = int(x/2); print(f"d0 = {d0}, x = {x}")
d0 = 1, x = 4
>>> d1 = x%2; x = int(x/2); print("d1 = %d, x = %d" % (d1,x))
>>> d1 = x%2; x = int(x/2); print(f"d1 = {d1}, x = {x}")
d1 = 0, x = 2
>>> d2 = x%2; x = int(x/2); print("d2 = %d, x = %d" % (d2,x))
>>> d2 = x%2; x = int(x/2); print(f"d2 = {d2}, x = {x}")
d2 = 0, x = 1
>>> d3 = x%2; x = int(x/2); print("d3 = %d, x = %d" % (d3,x))
>>> d3 = x%2; x = int(x/2); print(f"d3 = {d3}, x = {x}")
d3 = 1, x = 0
\end{verbatim}
\fi
Expand Down Expand Up @@ -433,7 +444,7 @@ \section{Sistema de numeração e mudança de base}\index{mudança de base}\inde
\begin{verbatim}
>>> print(bin(9))
0b1001
>>> print(oct(111)) #a saída será "0o157", no Python 3 ou superior
>>> print(oct(111))
0157
>>> print(hex(48826))
0xbeba
Expand Down Expand Up @@ -755,9 +766,9 @@ \section{Notação científica e notação normalizada}\index{sistema numérico!
\begin{obs}
Em $\verb+Python+$, podemos controlar a impressão de números usando o comando \verb+print+. Por exemplo:
\begin{verbatim}
>>> print("%1.5f" % -np.pi)
>>> print(f"{-np.pi:1.5f}")
-3.14159
>>> print("%1.5e" % -np.pi)
>>> print(f"{-np.pi:1.5e}")
-3.14159e+00
\end{verbatim}
No primeiro caso, obtemos a representação em ponto flutuante decimal com $6$ dígitos do número $-\pi$. No segundo caso, obtemos a representação em notação científica normalizada com $6$ dígitos.
Expand Down Expand Up @@ -1014,7 +1025,7 @@ \subsection{Arredondamento de números}\index{arredondamento de números}
\end{verbatim}
e, em notação normalizada, temos:
\begin{verbatim}
>>> print("%1.1e" % (int(-0.675*1e2)/1e2))
>>> print("{:1.1e}".format(int(-0.675*1e2)/1e2))
-6.7e-01
\end{verbatim}
\fi
Expand Down Expand Up @@ -1065,12 +1076,12 @@ \subsection{Arredondamento de números}\index{arredondamento de números}
\ifispython
Em \verb+Python+, a representação de números por arredondamento é o padrão. Assim, para obtermos a representação desejada de $x_3 = 0,675$ fazemos:
\begin{verbatim}
>>> print("%1.2f" % (-0.675))
>>> print("{:1.2f}".format(-0.675))
-0.68
\end{verbatim}
e, em notação normalizada:
\begin{verbatim}
>>> print("%1.1e" % (-0.675))
>>> print("{:1.1e}".format(-0.675))
-6.8e-01
\end{verbatim}
\fi
Expand Down Expand Up @@ -1167,12 +1178,12 @@ \subsection*{Exercícios}
O \verb+Python+ usa arredondamento por proximidade com desempate par
como padrão. Assim sendo, por exemplo
\begin{verbatim}
>>> print('%1.1e\n' % 1.25)
>>> print('{:1.1e}'.format(1.25))
1.2e+00
\end{verbatim}
Agora:
\begin{verbatim}
>>> print('%1.1e\n' % 2.45)
>>> print('{:1.1e}'.format(2.45)
2.5e+00
\end{verbatim}
Não deveria ser $2.4$? Explique o que está ocorrendo.
Expand Down Expand Up @@ -1803,9 +1814,9 @@ \subsection*{Exercícios}
\ifisscilab
\begin{exer}Considere a seguinte rotina escrita para ser usada no Scilab:
\begin{verbatim}
x=1
while x+1>x
x=x+1
x = 1
while x + 1 > x
x = x + 1
end
\end{verbatim}
Explique se esta rotina finaliza em tempo finito, em caso afirmativo calcule a ordem de grandeza do tempo de execução supondo que cada passo do laço demore $10^{-7}s$. Justifique sua reposta.
Expand Down Expand Up @@ -1844,9 +1855,9 @@ \subsection*{Exercícios}
\ifispython
\begin{exer}Considere a seguinte rotina escrita para ser usada no \verb+Python+:
\begin{verbatim}
x=1.0
while x+1>x:
x=x+1
x = 1.0
while x + 1 > x:
x = x + 1
\end{verbatim}
Explique se esta rotina finaliza em tempo finito, em caso afirmativo calcule a ordem de grandeza do tempo de execução supondo que cada passo do laço demore $10^{-7}s$. Justifique sua reposta.
\end{exer}
Expand Down Expand Up @@ -2038,17 +2049,17 @@ \subsection*{Exercícios}


\section{Erros nas operações elementares}
O erro relativo presente nas operações elementares de adição, subtração, multiplicação e divisão é da ordem do épsilon de máquina. Se estivermos usando uma máquina com 64 bits, temos que $\epsilon = 2^{-52} \approx 2,22E-16$.
O erro relativo presente nas operações elementares de adição, subtração, multiplicação e divisão é da ordem do épsilon de máquina. Se estivermos usando o sistema de numeração {\it binary64} ou {\it double}, temos $\epsilon = 2^{-52} \approx 2,22\cdot 10^{-16}$.

Este erro é bem pequeno para a maioria das aplicações! Assumindo que $x$ e $y$ são representados com todos dígitos corretos, temos aproximadamente 15 dígitos significativos corretos quando fazemos uma das operações $x+y$, $x-y$, $x\times y$ ou $x/y$.
Este erro é bem pequeno para a maioria das aplicações! Assumindo que $x$ e $y$ são representados com todos dígitos corretos, esperamos ter aproximadamente 15 dígitos significativos corretos quando fazemos uma das operações $x+y$, $x-y$, $x\times y$ ou $x/y$.

%%
%% fornecer exemplo para +,-,*,/
%%

Mesmo que fizéssemos, por exemplo, $1000$ operações elementares sucessivas em ponto flutuante, teríamos, no pior dos casos, acumulado todos esses erros e perdido $3$ casas decimais ($1000\times 10^{-15} \approx 10^{-12})$.

Entretanto, quando subtraímos números muito próximos, o erro pode se propagar de forma catastrófica.
Entretanto, existem situações em que o erro se propaga de forma muito catastrófica, me especial, quando subtraímos números positivos muito próximos.

\section{Cancelamento catastrófico}\index{cancelamento catastrófico}

Expand Down Expand Up @@ -2602,20 +2613,20 @@ \section{Exemplos selecionados de cancelamento catastrófico}
\ifispython
Para entendermos isso melhor, vejamos o que acontece no \verb+Python+ quando $n=7\times 10^{13}$:
\begin{verbatim}
>>> n=7e13; print("%1.15e" % n)
>>> n = 7e13; print(f"{n:1.15e}")
7.000000000000000e+13
>>> n=7e13; print("%1.20e" % n)
>>> n = 7e13; print(f"{n:1.20e}")
7.00000000000000000000e+13
>>> print("%1.20e" % (1/n))
>>> print(f"{1/n:1.20e}")
1.42857142857142843451e-14
>>> y=1+1/n; print("%1.20e" % y)
>>> y = 1 + 1/n; print(f"{y:1.20e}")
1.00000000000001421085e+00
\end{verbatim}
Observe a perda de informação ao deslocar a mantissa de $1/n$. Para evidenciar o fenômenos, observamos o que acontece quando tentamos recalcular $n$ subtraindo $1$ de $1+1/n$ e invertendo o resultado:
\begin{verbatim}
>>> print("%1.20e" % (y-1))
>>> print(f"{(y-1):1.20e}")
1.42108547152020037174e-14
>>> print("%1.20e" % (1/(y-1)))
>>> print(f"{(1/(y-1)):1.20e}")
7.03687441776640000000e+13
\end{verbatim}
\fi
Expand Down
1 change: 0 additions & 1 deletion cap_derivacao/cap_derivacao.tex
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ \chapter{Derivação numérica}\index{derivação}
\ifispython
Ao longo deste capítulo, assumiremos que as seguintes bibliotecas e módulos \verb+Python+ estão importados:
\begin{verbatim}
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
\end{verbatim}
Expand Down
5 changes: 2 additions & 3 deletions cap_equacao1d/cap_equacao1d.tex
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@ \chapter{Solução de equações de uma variável}\index{equações!de uma vari
\ifispython
Ao longo do capítulo, apresentamos algumas computações com \verb+Python+. Nestas, assumiremos o que os seguintes módulos estão carregados:
\begin{verbatim}
>>> from __future__ import division
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> import scipy as sci
>>> import scipy as sp
>>> from scipy import optimize
\end{verbatim}
A segunda instrução carrega a biblioteca de computação científica \href{http://www.numpy.org/}{numpy} e a terceira carrega a biblioteca gráfica \href{https://matplotlib.org/}{matplotlib}.
Expand Down Expand Up @@ -970,7 +969,7 @@ \subsection{Teorema do ponto fixo}\index{Teorema do!ponto fixo}
return np.cos(x)
#est. da solucao
xe = sci.optimize.fixed_point(g, 0.7)
xe = sp.optimize.fixed_point(g, 0.7)
#aprox. inicial
x0 = 0.7
Expand Down
Binary file added cap_equacao1d/pics/circuito_diodo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 0 additions & 1 deletion cap_integracao/cap_integracao.tex
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ \chapter{Integração numérica}\index{integração} \label{cap:integracao}
\ifispython
Nos códigos \verb+Python+ apresentados ao longo deste capítulo, assumiremos o seguinte:
\begin{verbatim}
>>> from __future__ import division
>>> import numpy as np
\end{verbatim}
\fi
Expand Down
3 changes: 1 addition & 2 deletions cap_interp/cap_interp.tex
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,8 @@ \chapter{Interpolação}\index{aproximação!de funções}\label{cap:interp}
% python
%%%%%%%%%%%%%%%%%%%%
\ifispython
Ao longo do capítulo, faremos alguns comentários usando códigos em \verb+Python 2.7+. Nestes, assumiremos que os seguintes módulos estão carregados:
Ao longo do capítulo, faremos alguns comentários usando códigos em \verb+Python+. Nestes, assumiremos que os seguintes módulos estão carregados:
\begin{verbatim}
from __future__ import division
import numpy as np
from numpy import linalg
from numpy.polynomial import polynomial as poly
Expand Down
Loading

0 comments on commit 78cebd6

Please sign in to comment.