Ir para conteúdo
Fórum Script Brasil
  • 0

método da bissecção programando em OCTAVE


rodrigoalmeida

Pergunta

Boa tarde galera... estou precisando fazer um trabalho de cálculo numérico.

Preciso achar a raiz ou raizes da função: Y=X³-7X+6 pelos 3 métodos (Bissecção, Secante e Newton-Raphson)

Preciso fazer o programa em OCTAVE separados

Será que alguém sabe fazer???

Para Secante

Xo=1.6

X1=1.8

Para Newton Raphson

Xo=1.8

E para Bissecção

Xo=1.5

H=0.3

Editado por rodrigoalmeida
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Provavelmente já não é mais de nenhuma ajuda, mas...

Desses aí eu só conheço Newton.

Ele é bem simples do ponto de vista matemático, mas exige um conhecimento razoável de análise (ou cálculo). Sugiro o livro do Elon, Análise vol. 1, para entender as sutilezas do método (demonstração de que funciona e de que as aproximações convergem quadraticamente p/ a raíz).

Para uma visão menos rigorosa do método: http://pt.wikipedia.org/wiki/M%C3%A9todo_de_Newton

Ele se baseia na diferenciabilidade da função e em algumas outras hipóteses importantes.

Mãos à obra.

Seja Y = x^3-7x+6 := f(x) .......(1)

Então f'(x)=3x^2 - 7 ................(2)

(observe que eu estou calculando analiticamente a derivada, mas eventualmente isso não será possível e você terá que usar uma aproximação)

O que você quer é uma sequencia de pontos x_n que convirja para um número x tal que f(x)=0.

Vamos usar o fato de que f(x+h)=f(x)+hf'(x)+O(h^2). (Notação de Landau)

Seja X0 = 1.8. Seria ideal que eu pudesse achar um ΔX0 tal que X1 = X0+ΔX0 fizesse f se anular, isto é, f(X1) = f(X0+ΔX0) = 0. É claro que eu não posso usar a própria função (senão estaria roubando, resolvendo explicitamente o polinômio).

O que eu vou fazer é usar a aproximação linear, cometendo um abuso de notação (qual seja, usar f para a função e para a aproximação linear):

f(X0+ΔX0) = f(X0)+ΔX0 * f'(X0) = 0 ==> ΔX0 = -f(X0)/f'(X0)

Logo o próximo termo da seqüência será X1 = X0+ΔX0 = X0-f(X0)/f'(X0)

Analogamente (faça as contas, estou com preguiça), se eu já tiver definido Xk, o X(k+1) deverá ser:

X(k+1) = Xk - f(Xk)/f'(Xk)

Para fazer o algoritmo, basta subsituir as expressões (1) e (2) na linha acima. É claro, em algum momento o algoritmo tem que parar. Você pode fazer com que ele pare com um número pré-determinado de passos.

Em pseudocódigo:

declara real X, X0;
declara inteiro numero_passos;

numero_passos <- 500;
X0 <- 1.8;
X<-X0;  *comentário: essa é uma variável que vai armazenar os valores sucessivos da seqüência*
para k=1 até k=numero_passos faça:
   X<- X - Poli(X)/DerivadaPoli(X);
fim para
imprime "A raíz encontrada foi: ";
imprime X;

função Poli(real Z)
  declara real Y;
  Y<- Z^3 - 7*Z + 6;
  retorna Y;
fim função

função DerivadaPoli(real Z)
  declara real Y;
  Y<-2*Z^2 - 7
  retorna Y;
fim função

Editado por John Doe
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...