Home Novidades Testes Conteúdos

 

 

Uma questão em Maple

Problema: Utilizando o programa Maple V e o método de Newton, determine uma aproximação ao zero real do polinómio:  no intervalo  , para a aproximação inicial  , com um erro inferior a 

Nota: Para o problema apresentado o método de Newton converge. A verificação fica como exercício para o leitor. 

Com o objectivo de aplicar o programa de Maple V, ao método de Newton, para determinar uma aproximação de um zero real de um polinómio de grau n, vamos apresentar o seguinte algoritmo.: 

Dados: Um polinómio p de grau n; uma aproximação inicial x0; uma tolerância T e um número máximo de iterações Mj

Etapa 1: Introduzir p, T, x0, Mj, e fazer j = 1, i.e., iteração n.º 1; 

Etapa 2:Determinar p(x0) e p’(x0). 

Etapa 3: Se p’(x0) ¹ 0 ir para a etapa 4, caso contrário Fim 1; 

Etapa 4: Determinar    

Etapa 5: Se j < Mj , executar as etapas de 6 a 9. Caso contrário Fim 2; 

Etapa 6: Actualização do valor de x0 através de x0 = xj ; e actualização da iteração através de 

Etapa 7: Determinar p(x0) e p’(x0). 

Etapa 8: Se  ir para etapa 9, caso contrário Fim 1. 

Etapa 9: Determinar   Voltar à etapa 5; 

Fim 1: O método não converge para a aproximação inicial dada. 

Fim 2: Ao fim de Mj iterações, xMj não satisfaz a tolerância dada; ou então a aproximação pretendida do zero é xj e ocorre na iteração j. 

Tendo em conta o algoritmo anterior, temos, para o nosso Problema, o seguinte programa em Maple V (z= é a aproximação inicial, k = 10 o número máximo de iterações, T = 10-6 é a tolerância dada, r é o erro que se comete iteração a iteração, dp é a derivada de p e m uma variável de apoio): 

p:=   

dp:= D(p);z:= -2 ; k:= 1; m:= z: 

x

    

 -2  

.... 

-1.28947368 

0.71052632 

-0.887109306 

0.402364374 

-0.706852655 

0.180256651 

-0.663080414 

0.043772241 

-0.660451589 

0.002628825 

-0.660442251 

0.9338 ´ 10-5 

-0.660442249 

0.2 ´ 10-8 

print(‘dp(m)’=dp(m)); 

if dp(m)= 0 then k:= 10 else z:= , 9); 

r:= ; 

while(k<10 and abs(z-m)>=10-6)do 

m:= z: 

print(‘dp(m)’= dp(m)); 

k:= k+1; 

if dp(m) = 0 then K:=10 else z:= print(‘z’=z); 

r:= abs(z – m); print(‘r’=r) fi; 

od; 

Ao executar o programa anterior, temos a solução apresentada na tabela: 

E, assim, obtivemos a solução do Problema, z = -0.660442249 que ocorre na iteração k.= 7 com uma tolerância inferior a 10-6.  

Nota: Para perceber melhor os comandos Maple V que estão descritos no programa contactar o docente (Prof. Fernando Carapau). 

Prof. Fernando Carapau