Ultima actualização: 70/01/01
anterior / inicio

Os meus programas para HP48

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:

  • Stack1: nova aproximação
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:

  • Stack1: o valor de Y
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
Página composta no VIM, em Debian GNU/Linux
Copyright © 2000 Hugo Lopes (AKA shagma - shagma_at_bugio.org)
Powered by HTML4, CSS & PHP standards