anterior
/ inicio
Métodos numéricos
Aqui ficam alguns programas que fiz para a cadeira de Análise
numérica, implementam alguns métodos numéricos para a
aproximação de zeros de funções. Todos os
programas calculam apenas uma iteração, foram feitos para serem
usados repetidamente até obter o resultado desejado.
Bisseção
Implementação do método da Bisseção,
é o método que converge mais lentamente (1, convergência
linear).
Primeira versão, foi o primeiro programa que tentei fazer usando a
HP, por isso fiz os passos todos de forma lógica. Usa 4
variáveis: A, B, C e X.
<<
'B' STO 'A' STO A B
'A+(B-A)/2' ->NUM 'C' STO
C 'X' STO EQ ->NUM
A 'X' STO EQ ->NUM
* 'X' STO
IF 'X>0'
THEN C 'A' STO
ELSE C 'B' STO
END
A B
>>
Versão optimizada, usa mais comandos de stack e apenas duas
variáveis, por isso é mais pequeno e mais rápido.
<<
DUP2 'C' STO 'X' STO
EQ ->NUM
'X+(C-X)/2' ->NUM
DUP 'C' STO 'X' STO
EQ ->NUM
* 'X' STO
IF 'X>0'
THEN DUP C SWAP
ELSE DUP2 DROP C
END
>>
Parâmetros de entrada:
- Stack1: extremo esquerdo do intervalo
- Stack2: extremo direito do intervalo
- EQ: equação
Parâmetros de saida:
- Stack1: extremo esquerdo do novo intervalo
- Stack2: extremo direito do novo intervalo
- nota:
um destes dois valores vai ser igual ao da
iteração anterior.
Newton
Implementação do método de Newton, é o que
converge mais rápidamente (2, convergência quadrática) e
só é necessária uma aproximação inicial,
mas temos que calcular uma derivada da função em cada
iteração.
<<
DUP 'X' STO X EQ ->NUM
EQ 'X' d / -
>>
nota:
a letra 'd' entre 'X' e '/' representa o simbolo
de derivada.
Parâmetros de entrada:
- Stack1: aproximação inicial
- EQ: equação
Parâmetros de saida:
Secante
Implementação do método da secante. Tem velocidade de
convergência media (1.62, convergência superlinear), como evitamos
calcular a derivada da função (é usada uma
aproximação) as iterações são mais
rápidas que com o método de Newton.
São necessárias duas aproximações iniciais.
<<
DUP2 'X' STO 'C' STO
X EQ ->NUM DUP X SWAP
C 'X' STO EQ ->NUM -
SWAP X - / / -
>>
Parâmetros de entrada:
- Stack2: extremo esquerdo do intervalo
- Stack1: extremo direito do intervalo
- EQ: equação
- nota:
os valores iniciais devem estar suficientemente
proximos do zero a calcular para que haja convergência.
Parâmetros de saida:
- Stack1: novo extremo para o intervalo
- nota:
na iteração seguinte vai ser
usado este valor e o ultimo da iteração anterior.
Ouros programas simples
Valor de uma equação num ponto
Muito simples, calcula o valor (Y) da equação (EQ) no ponto
(X) dado na stack.
<<
DUP 'X' STO
EQ ->NUM
>>
Parâmetros de entrada:
- Stack1: o valor de X
- EQ: equação
Parâmetros de saida:
Erro absoluto
Calcula a diferença em valor absoluto entre os dois ultimos valores
da stack. Usa duas variáveis internas.
<<
DUP2 -> A B 'ABS(A-B)'
>>
Parâmetros de entrada:
- Stack2: um valor
- Stack1: outro valor
Parâmetros de saida:
- Stack1: diferença em valor absoluto entre os dois valores
topo |
anterior
/ inicio
|