Fernando Simeone Computação Numérica 1 1 1 1 1 … …
Fernando Simeone
Computação Numérica
1 1 1 1 1… …
Sumário
1. Cálculo de Funções
2. Computação Numérica
3. Operações Sequenciais
4. Criando uma Linguagem de Programação
5. Considerações Finais
Cálculo de Funções1
Máquina de TuringReconhecimento de Linguagens
MT = (Q, Σ, Γ, δ, q0)
q0 qs
qn
q1
q2
B a c c b B B B B B B… …Entrada:
Máquina de TuringReconhecimento de Linguagens
MT = (Q, Σ, Γ, δ, q0)
q0 qs
qn
q1
q2
B a c c b B B B B B B… …
x Não aceita
✓ Aceita
Entrada:
Máquina de TuringCálculo de Funções
MT = (Q, Σ, Γ, δ, q0, qf)
q0 qfFim da
computação
B a c c b B B B
Entrada:
M
Máquina de TuringCálculo de Funções
MT = (Q, Σ, Γ, δ, q0, qf)
q0 qfFim da
computação
B a c c b B B B
Entrada:
B a a B B B B B
Resultado:
M
Máquina de TuringCálculo de Funções (Turing computáveis)
MT = (Q, Σ, Γ, δ, q0, qf)
q0 qfFim da
computação
B a c c b B B B
Entrada:
B B B B B B B B
Resultado:
q1 q2
(B, B, ➞)
(B, B, ➞)(b, b, ➞)
(b, b, ➞)(a, a, ➞)
(a, a, ➞) (B, B, ➞)
(b, B, ➞)(a, B, ➞)
Máquina de TuringCálculo de Funções
MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑*
q0 qfq1 q2
(B, B, ➞)
(B, B, ➞)(b, b, ➞)
(b, b, ➞)(a, a, ➞)
(a, a, ➞) (B, B, ➞)
(b, B, ➞)(a, B, ➞)
Máquina de TuringCálculo de Funções
MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑*
q0 qfq1 q2
(B, B, ➞)
(B, B, ➞)(b, b, ➞)
(b, b, ➞)(a, a, ➞)
(a, a, ➞) (B, B, ➞)
(b, B, ➞)(a, B, ➞)
• Apenas uma transição partindo do estado q0: δ(q0,B) = [qi, B, ➞];
Máquina de TuringCálculo de Funções
MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑*
q0 qfq1 q2
(B, B, ➞)
(B, B, ➞)(b, b, ➞)
(b, b, ➞)(a, a, ➞)
(a, a, ➞) (B, B, ➞)
(b, B, ➞)(a, B, ➞)
• Apenas uma transição partindo do estado q0: δ(q0,B) = [qi, B, ➞];
• Não há transições que retornam para q0;
Máquina de TuringCálculo de Funções
MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑*
q0 qfq1 q2
(B, B, ➞)
(B, B, ➞)(b, b, ➞)
(b, b, ➞)(a, a, ➞)
(a, a, ➞) (B, B, ➞)
(b, B, ➞)(a, B, ➞)
• Apenas uma transição partindo do estado q0: δ(q0,B) = [qi, B, ➞];
• Não há transições que retornam para q0;
• Não há transições na forma δ(qf,B);
Máquina de TuringCálculo de Funções
MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑*
q0 qfq1 q2
(B, B, ➞)
(B, B, ➞)(b, b, ➞)
(b, b, ➞)(a, a, ➞)
(a, a, ➞) (B, B, ➞)
(b, B, ➞)(a, B, ➞)
• Apenas uma transição partindo do estado q0: δ(q0,B) = [qi, B, ➞];
• Não há transições que retornam para q0;
• Não há transições na forma δ(qf,B);
• A MT com entrada u para com configuração q0BvB se f(u) = v;
Máquina de TuringCálculo de Funções
MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑*
q0 qfq1 q2
(B, B, ➞)
(B, B, ➞)(b, b, ➞)
(b, b, ➞)(a, a, ➞)
(a, a, ➞) (B, B, ➞)
(b, B, ➞)(a, B, ➞)
• Apenas uma transição partindo do estado q0: δ(q0,B) = [qi, B, ➞];
• Não há transições que retornam para q0;
• Não há transições na forma δ(qf,B);
• A MT com entrada u para com configuração q0BvB se f(u) = v;
• A MT não pára se f(u) for indefinido.
Máquina de TuringLendo argumentos e escrevendo resultado
Máquina de TuringLendo argumentos e escrevendo resultado
B a b B B B B B B B B B b a B B
• f(ab) = baEntrada Resultado
Máquina de TuringLendo argumentos e escrevendo resultado
B a b B B B B B B B B B b a B B
• f(ab) = baEntrada Resultado
B a b B c c B b a c B B a b B B
• f(ab, cc, bac) = abEntrada Resultado
Máquina de TuringLendo argumentos e escrevendo resultado
B a b B B B B B B B B B b a B B
• f(ab) = baEntrada Resultado
B a b B c c B b a c B B a b B B
• f(ab, cc, bac) = abEntrada Resultado
B a b B B b a c B B B B B B B B
• f(ab, λ, bac) = λEntrada Resultado
Cálculo de FunçõesExemplo: concatenando palavras
q0 q1
(B, B, ➞)q2 q5
q3
q4
q6
qf
(b, b, ➞)(a, a, ➞)
(B, B, ➞)
(a, B, ←) (B, a, ➞)
(b, B, ←) (B, b, ➞)
(B, B, ➞)
(B, B, ←)
(B, B, ←)
(b, b, ←)(a, a, ←)
B a b B b a BEntrada Resultado
B a b b a B B
Computação Numérica2
Funções Numéricas
Funções Numéricas• f: N × N × N × … × N ⟶ N
Funções Numéricas• f: N × N × N × … × N ⟶ N
• Exemplos
Funções Numéricas• f: N × N × N × … × N ⟶ N
• Exemplos
• sq(n) = n2
Funções Numéricas• f: N × N × N × … × N ⟶ N
• Exemplos
• sq(n) = n2
• db(n) = 2n
Funções Numéricas• f: N × N × N × … × N ⟶ N
• Exemplos
• sq(n) = n2
• db(n) = 2n
• add(x, y) = x + y
RepresentaçãoComo representar números na fita
Representação
• n = 1n+1
Como representar números na fita
Representação
• n = 1n+1
• 0 = 1
Como representar números na fita
Representação
• n = 1n+1
• 0 = 1
• 1 = 11
Como representar números na fita
Representação
• n = 1n+1
• 0 = 1
• 1 = 11
• 2 = 111
Como representar números na fita
RepresentaçãoComo representar números na fita
RepresentaçãoComo representar números na fita
B 1 1 1 B B B B B B B B 1 1 B B
• f(2) = 1Entrada Resultado
RepresentaçãoComo representar números na fita
B 1 1 1 B B B B B B B B 1 1 B B
• f(2) = 1Entrada Resultado
B 1 1 1 1 B 1 B B B B B 1 1 1 B
• f(3, 0) = 2Entrada Resultado
Cálculo Funções NuméricasSucessor
q0 q1
(B, B, ➞)qf
(1, 1, ➞)
(B, 1, ➞)
(1, 1, ←)
B 1 1 1 B B BEntrada Resultado
B 1 1 1 1 B B
S:
• s(n) = n + 1
Cálculo Funções NuméricasZero
q0 q1
(B, B, ➞)qf
(1, 1, ➞)
(B, B, ←)
B 1 1 1 B B BEntrada Resultado
B 1 B B B B B
Z:
• z(n) = 0
q2
(1, B, ←)
(B, B, ➞) (B, 1, ←)q3
Cálculo Funções NuméricasAdição
q0 q1
(B, B, ➞)qf
(1, 1, ➞)
(B, 1, ➞)
Entrada Resultado
B 1 1 1 1 B B
A:
• a(n, m) = n + m
q2
(1, 1, ➞)
(B, B, ←) (1, B, ←)q3
(1, B, ←)q4
(1, 1, ←)
B 1 1 B 1 1 1 B
Cálculo Funções NuméricasDecremento
q0 q1
(B, B, ➞)
qf
(1, 1, ➞)
Entrada Resultado
B 1 1 B B B B
D:
• a(n) = n - 1
q2
(1, 1, ➞)
(1, 1, ➞)
(B, B, ←)
q3(B, B, ←)
q4
(1, 1, ←)
B 1 1 1 B B B B
(1, B, ←)
Operações Sequenciais3
Operações SequenciaisCom máquinas de Turing
qs,0 qs,1
(B, B, ➞)qs,f
(1, 1, ➞)
(B, 1, ➞)
(1, 1, ←)
S:
qz,0 qz,1
(B, B, ➞)qz,f
(1, 1, ➞)
(B, B, ←)Z: qz,2
(1, B, ←)
(B, B, ➞) (B, 1, ←)qz,3
Zero
Sucessor
z(n) = 0
s(n) = n + 1
Operações SequenciaisCom máquinas de Turing
qs,0 qs,1
(B, B, ➞)qs,f
(1, 1, ➞)
(B, 1, ➞)
(1, 1, ←)
S:
qz,0 qz,1
(B, B, ➞)qz,f
(1, 1, ➞)
(B, B, ←)Z: qz,2
(1, B, ←)
(B, B, ➞) (B, 1, ←)qz,3
Zero
Sucessor
z(n) = 0
s(n) = n + 1
Operações SequenciaisCom máquinas de Turing
qs,1
(B, B, ➞)
qs,f
(1, 1, ➞) (B, 1, ➞)
(1, 1, ←)
qz,0 qz,1
(B, B, ➞)qz,f = qs,0
(1, 1, ➞)
(B, B, ←)qz,2
(1, B, ←)
(B, B, ➞) (B, 1, ←)qz,3
s( z(n) ) = 0 + 1 = 1
Operações SequenciaisCom máquinas de Turing
qs,1
(B, B, ➞)
qs,f
(1, 1, ➞) (B, 1, ➞)
(1, 1, ←)
qz,0 qz,1
(B, B, ➞)qz,f = qs,0
(1, 1, ➞)
(B, B, ←)qz,2
(1, B, ←)
(B, B, ➞) (B, 1, ←)qz,3
s( z(n) ) = 0 + 1 = 1
Operações SequenciaisMacros
*
f(n) = s( z(n) )
Z * S *F:
Operações SequenciaisMacros
*
f(n) = s( z(n) )
Z * S *
• Nem todas as computações irão iniciar com a cabeça de leitura na posição 0 da fita;
F:
Operações SequenciaisMacros
*
f(n) = s( z(n) )
Z * S *
• Nem todas as computações irão iniciar com a cabeça de leitura na posição 0 da fita;
F:
Operações SequenciaisMacros
*
f(n) = s( z(n) )
Z * S *
• Nem todas as computações irão iniciar com a cabeça de leitura na posição 0 da fita;
• Toda computação deve iniciar lendo o símbolo branco (B) da fita.
F:
MacrosNotação utilizada
B n1 B n2 B … B nk B
MacrosNotação utilizada
B n1 B n2 B … B nk B
k-ésimo número na fita"(sequência de 1s)
MacrosNotação utilizada
B n1 B n2 B … B nk B
k-ésimo número na fita"(sequência de 1s)
B 1 1 B 1 1 1 B B
Exemplo:
{ {n1 n2
MacrosExemplo
MRk B n1 B n2 B … B nk BMove Right
B n1 B n2 B … B nk B
MacrosExemplo
q0 q1
(B, B, ➞)qf
(1, 1, ➞)
(B, B, ➞)MR2:
(1, 1, ➞)
MRk B n1 B n2 B … B nk BMove Right
B n1 B n2 B … B nk B
MacrosExemplo
q0 q1
(B, B, ➞)qf
(1, 1, ➞)
(B, B, ➞)MR2:
(1, 1, ➞)
MRk B n1 B n2 B … B nk BMove Right
B n1 B n2 B … B nk B
q0 q1
(B, B, ➞)qf
(1, 1, ➞)
(B, B, ➞)MRk:
(1, 1, ➞)
(B, B, ➞)qk-1
(1, 1, ➞)
…(B, B, ➞)
MacrosMRk B n1 B n2 B … B nk BMove Right
B n1 B n2 B … B nk B
MacrosMRk B n1 B n2 B … B nk BMove Right
B n1 B n2 B … B nk B
MLk B n1 B n2 B … B nk BMove Left
B n1 B n2 B … B nk B
MacrosMRk B n1 B n2 B … B nk BMove Right
B n1 B n2 B … B nk B
MLk B n1 B n2 B … B nk BMove Left
B n1 B n2 B … B nk B
FR B B B n1 B n2 B BFind Right
B B B n1 B n2 B B
MacrosMRk B n1 B n2 B … B nk BMove Right
B n1 B n2 B … B nk B
MLk B n1 B n2 B … B nk BMove Left
B n1 B n2 B … B nk B
FR B B B n1 B n2 B BFind Right
B B B n1 B n2 B B
FLFind Left
B BB n1 B n2 B B B BB n1 B n2 B B
MacrosMRk B n1 B n2 B … B nk BMove Right
B n1 B n2 B … B nk B
MLk B n1 B n2 B … B nk BMove Left
B n1 B n2 B … B nk B
FR B B B n1 B n2 B BFind Right
B B B n1 B n2 B B
FLFind Left
B BB n1 B n2 B B B BB n1 B n2 B B
EkErase
B B B B B … B B BB n1 B n2 B … B nk B
MacrosCPYkCopy
B n1 B n2 B … B nk B B B B B … B B B
B n1 B n2 B … B nk B n1 B n2 B … B nk B
MacrosCPYkCopy
B n1 B n2 B … B nk B B B B B … B B B
B n1 B n2 B … B nk B n1 B n2 B … B nk B
CPYk, iCopy
B n1 B … B nk B B nk+i… B B B … B B B
B n1 B … B nk B B nk+i… B n1 B … B nk B
MacrosCPYkCopy
B n1 B n2 B … B nk B B B B B … B B B
B n1 B n2 B … B nk B n1 B n2 B … B nk B
CPYk, iCopy
B n1 B … B nk B B nk+i… B B B … B B B
B n1 B … B nk B B nk+i… B n1 B … B nk B
T B B B n1 B B B BTranslate
B BBn1 B B B B
MacrosBRNBranch on zero
B n1 B n2 B … B nk B B n1 B n2 B … B nk B
* BRNn = 0
n > 0
*
*
INTInterchange
B n B m B B B
* * E1 * T * MR1 * T * ML1 *CPY1,1
B m B n B B B
Utilizando outras macrosMacros
* * MR1 * * A * ML1 * A *CPY1
Exemplo de utilizaçãoMacros
• f(n) = 3n
CPY1
Exemplo de utilizaçãoMacros
T
*
E1 * ML1 *q0
(B, B, ➞)q
1
(1, 1, ➞)q
2
(B, B, ➞)
E1
*
T
q3
CPY1
*
q5
q4
ML1A *MR1 *CPY1,1
q8
q7
q6
*
MULT:(1, X, ➞)
(1, 1, ➞)
(B, B, ➞)
(B, B, ←)
(X, B, ←) (B, B, ➞)
(X, B, ←)(1, B, ←)
(1, 1, ←)
(1, 1, ←)
(X, X, ➞)(1, X, ➞)
(1, 1, ➞)
(B, B, ➞)
Criando uma Linguagem de Programação
4
Arquitetura
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada
Variáveis locais
Registradores e espaço de trabalho
home
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
HOME t Move a cabeça de leitura para home quando há t variáveis alocadas.
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
HOME t Move a cabeça de leitura para home quando há t variáveis alocadas.
LOAD v Carrega a variável
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
HOME t Move a cabeça de leitura para home quando há t variáveis alocadas.
LOAD v Carrega a variável
STOR v Armazena o valor do registrador
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
HOME t Move a cabeça de leitura para home quando há t variáveis alocadas.
LOAD v Carrega a variável
STOR v Armazena o valor do registrador
RETURN v Limpa todas as variáveis deixando o valor de
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
HOME t Move a cabeça de leitura para home quando há t variáveis alocadas.
LOAD v Carrega a variável
STOR v Armazena o valor do registrador
RETURN v Limpa todas as variáveis deixando o valor de
CLEAR t Limpa o valor do registrador t
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
HOME t Move a cabeça de leitura para home quando há t variáveis alocadas.
LOAD v Carrega a variável
STOR v Armazena o valor do registrador
RETURN v Limpa todas as variáveis deixando o valor de
CLEAR t Limpa o valor do registrador t
BRN L, t Vai para a instrução L se o valor do registrador t é 0.
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
HOME t Move a cabeça de leitura para home quando há t variáveis alocadas.
LOAD v Carrega a variável
STOR v Armazena o valor do registrador
RETURN v Limpa todas as variáveis deixando o valor de
CLEAR t Limpa o valor do registrador t
BRN L, t Vai para a instrução L se o valor do registrador t é 0.
GOTO L Executa a instrução L.
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
HOME t Move a cabeça de leitura para home quando há t variáveis alocadas.
LOAD v Carrega a variável
STOR v Armazena o valor do registrador
RETURN v Limpa todas as variáveis deixando o valor de
CLEAR t Limpa o valor do registrador t
BRN L, t Vai para a instrução L se o valor do registrador t é 0.
GOTO L Executa a instrução L.
NOP “No operation” (utilizada em conjunto com a instruçõ GOTO)
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
HOME t Move a cabeça de leitura para home quando há t variáveis alocadas.
LOAD v Carrega a variável
STOR v Armazena o valor do registrador
RETURN v Limpa todas as variáveis deixando o valor de
CLEAR t Limpa o valor do registrador t
BRN L, t Vai para a instrução L se o valor do registrador t é 0.
GOTO L Executa a instrução L.
NOP “No operation” (utilizada em conjunto com a instruçõ GOTO)
INC t Incrementa o valor do registrador t.
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
HOME t Move a cabeça de leitura para home quando há t variáveis alocadas.
LOAD v Carrega a variável
STOR v Armazena o valor do registrador
RETURN v Limpa todas as variáveis deixando o valor de
CLEAR t Limpa o valor do registrador t
BRN L, t Vai para a instrução L se o valor do registrador t é 0.
GOTO L Executa a instrução L.
NOP “No operation” (utilizada em conjunto com a instruçõ GOTO)
INC t Incrementa o valor do registrador t.
DEC t Decrementa o valor do registrador t.
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
INIT v Inicializa variável local
HOME t Move a cabeça de leitura para home quando há t variáveis alocadas.
LOAD v Carrega a variável
STOR v Armazena o valor do registrador
RETURN v Limpa todas as variáveis deixando o valor de
CLEAR t Limpa o valor do registrador t
BRN L, t Vai para a instrução L se o valor do registrador t é 0.
GOTO L Executa a instrução L.
NOP “No operation” (utilizada em conjunto com a instruçõ GOTO)
INC t Incrementa o valor do registrador t.
DEC t Decrementa o valor do registrador t.
ZERO t Substitui o valor do registrador t por 0.
B v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
Início
InstruçõesB v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
home
InstruçõesB v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
home
HOME t
MR t
InstruçõesB v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
home
INIT vi MR i - 1
ZR ML i - 1
HOME t
MR t
InstruçõesB v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
home
INIT vi MR i - 1
ZR ML i - 1
HOME t
MR tSTOR vi, t
MR t - 2
INT ML1
INT MR1
INT MR 1
ER 1
ML t - 1
( )( )
t + n - i - 1
t + n - i - 1
InstruçõesB v1 B v2 B … B vk B vk+1 B vn B … B B B… B …
Variáveis de entrada Variáveis locais Registradores e espaço de trabalho
home
INIT vi MR i - 1
ZR ML i - 1
HOME t
MR tSTOR vi, t
MR t - 2
INT ML1
INT MR1
INT MR 1
ER 1
ML t - 1
( )( )
t + n - i - 1
t + n - i - 1
LOAD vi, t
ML n - i + 1
CPY 1, n - i + 1 + t MR n - i + 1
Exemplo
INIT v2
INIT v3
HOME 3 LOAD v1,1 STOR v2,1 L1 LOAD v2,1 BRN L2,1 LOAD v1,1 INC
STOR v1,1 LOAD v2,1 DEC STOR v2,1 GOTO L1 L2 LOAD v1,1 INC STOR v1,1 RETURN v1
Início
• f(n) = 2n + 1
Considerações Finais5
Referências
• SUDKAMP, T. A. Languages and Machines: An Introduction to the Theory of Computer Science (3rd Edition). Boston, MA, USA: Addison-Wesley Longman Publishing Co., Inc., 2005. ISBN 0321322215.
Obrigado Dúvidas ??