Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Basicamente correções textuais e atualizações. Também criei um script para extrair os exercícios do livro #287

Merged
merged 20 commits into from
Mar 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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