Métodos para cálculos numéricos

32
UNIVERSIDADE FEDERAL DE OURO PRETO DEPARTAMENTO DE COMPUTAÇÃO E SISTEMAS DE INFORMAÇÃO INSTITUTO DE CIÊNCIAS EXATAS E APLICADAS Trabalho 1 Implementação de Algoritmos Numéricos Análise Numérica Alean dos Santos Lima 11.2.8137 Ewertton Bento Domiciano - 09.2.8141 Julia Aparecida de Souza - 12.2.8412 Marina Ferreira – 10.2.8193 Otavio Augusto Mendes Frigo - 13.2.83.19 Pablo Henrique Antunes Silva - 10.1-8192

description

Algoritmos para métodos de análise numérica

Transcript of Métodos para cálculos numéricos

Trabalho 1Implementao de Algoritmos Numricos

Anlise Numrica

Alean dos Santos Lima 11.2.8137Ewertton Bento Domiciano - 09.2.8141Julia Aparecida de Souza - 12.2.8412Marina Ferreira 10.2.8193Otavio Augusto Mendes Frigo - 13.2.83.19Pablo Henrique Antunes Silva - 10.1-8192

Maio 2015Joao MonlevadeSumrioI. Introduo3III.Problema11IV.Desenvolvimento12V. Testes13VI.Concluses20VII.Bibliografia21Anexo 1 Algoritmos21

I. Introduo Nesse trabalho vamos exemplificar as aplicaes aprendidas em clculo numrico, so mtodos desenvolvidos para resolver computacionalmente os problemas matemticos apresentados. Isso nos apresenta a matemtica computacional, que tem como objetivo aprender processos numricos para soluo de problemas, com mais confiabilidade, agilidade e menor erro.Os fatores que so levados em conta quando se usa um computador para resolver os problemas matemticos apresentados so: o tempo de execuo, normalmente menor, a memria utilizada, que nos dias atuais no apresenta grande significncia uma vez que os computadores atuais apresentam grande quantidade de memria, o terceiro fator o erro de arredondamento que pode depender de condies de configuraes do sistema ou dos limites de representaes do mesmo.Uma definio para algoritmos numricos pode ser: So os algoritmos voltados ao processamento numrico, isto , s operaes aritmticas que formam o cerne do algoritmo. O seu objetivo obter um ou mais resultados numricos. Um algoritmo numrico de boa qualidade tem as seguintes caractersticas: (alcides).Para o nosso trabalho quatro algoritmos so apresentados e testados a fim de verificar o seu funcionamento. Alm de testa-lo tambm os comparamos com exemplos disponveis na bibliografia do curso.Aps isso, vamos analisar os resultados e o funcionamento de cada algoritmo apresentado e depois tirar uma concluso vlida do experimento.

II. Algoritmos Numricos Os algoritmos numricos podem ser vistos como uma facilitao da resoluo para sistemas lineares, pois com ele usamos o computador para a resoluo dos problemas. Desta forma, nos permite resolver de maneira mais rpida e com maior preciso o nosso problema. Estes algoritmos so aplicados em diversas reas de estudo e para resoluo de diversos problemas matemticos.O principal fator em nosso caso o uso do computador, possibilitando uma resoluo mais rpida, eficiente e precisa. Isso nos permite trabalhar com problemas muito maiores, e mais complexos. Os Algoritmos tratados no trabalho so regularmente usados para a resoluo de sistema lineares, como Jordan e Jacobi, outros algoritmos so implementados para mtodos voltados a encontrar razes de uma funo, como o mtodo de bisseco e o mtodo de newton.O primeiro algoritmo estudado nesse trabalho, uma evoluo da eliminao de Gauss, conhecido como eliminao de Gauss-Jordan, nesse caso o objetivo zerar os elementos acima e abaixo do elemento de pivotao, assim ao terminar o processo a matriz se encontra escalonada.Exemplo de Gauss Jordan

Procuramos chegar a outra matriz, com os passos do mtodo anterior, forma diagonal:

Que ser associada a um sistema da forma:

Isto quer dizer que se conseguirmos chegar da matriz B matriz B', a soluo do sistema imediata. Podemos, ainda, dividir cada linha pelo elemento da diagonal, e assim chegar matriz identidade.Por exemplo:

Figura 1 - Processo de Resoluo do Jordan

Pela resoluo do exemplo, temos somente a diagonal principal, que nos permite chegar de maneira mais fcil ao resultado do sistema.O segundo mtodo a ser estudado o mtodo de Jacobi que considete em uma forma iterativa para resolver o sistema de equaes lineares. Mtodo matemtico criado por Carl Gustav Jacobi. Este mtodo usado para aplicaes mais robustas em relao aos casos resolvidos pelo mtodo de Gauss. Com sistemas grandes ou com um vasto nmero de entradas, Jacobi se mostra mais eficiente para achar os coeficientes. Este mtodo consiste em isolar as incgnitas e de modo interativo gerar uma aproximao dos valores do sistema, respeitando critrios de parada como erro e iteraes mximas.

Figura 2 - Exemplo para resoluo de JacobiProcesso de isolar as incgnitas ao quais queremos achar.

Figura 3 - Processo de Isolamento das incgnitas

Processo base para estabelecer as incgnitas do sistema, depois disso, comea um processo de substituio sucessivas que se baseia na substituio das incgnitas pelo vetor inicial de x, formando outro vetor que ser novamente aplicado no sistema, fazendo isso at que a condio de parada seja atendida, normalmente o erro mximo ou o nmero de iteraes mximas.

Figura 4 - Processo de substituio sucessivas

Fazendo computacionalmente, todas as interaes ate que as condies de parada sejam atendidas, temos as seguintes sadas.

Figura 5 - Soluo computacional para o problema.

O terceiro algoritmo em estudo o mtodo da bisseco, usado para achar as razes de uma funo continua, considerado um mtodo simples e robusto. Por definio, os dois intervalos usados devem conter a raiz, chamadas de razes a e b. O processo consiste em dividir o intervalo no ponto mdio e ir verificando em qual subintervalo se encontra a raiz. O processo se repete at que o erro seja menor que a condio de parada.

Exemplo do mtodo de Bisseco

Figura 6 - Exemplo do Mtodo de Bisseco

Na imagem acima mostrado a resoluo de um problema pelo mtodo da bisseco, fazendo todo o processo de achar novas razes e avalia-las sucessivamente, at que o erro seja menor que a condio de parada.O prximo caso a implementao do mtodo de Newton. Desenvolvido por Issac Newton, uma evoluo do mtodo da bisseco, com o mesmo intuito de achar as razes de uma funo. Em comparao com o mtodo apresentado anteriormente o mtodo de Newton converge muito mais rpido e consequentemente, mais efetivo. O mtodo se baseia no clculo de retas tangentes, e derivaes. Assim o processo vai aproximando ao valor da raiz desejado. A representao matemtica do mtodo dada como:

Essa definio usada para achar o prximo x do sistema, dependendo da funo e da sua primeira derivada.

Exemplo do mtodo de Newton

Figura 7 - Exemplo do Mtodo de Newton

O processo de resoluo utilizando omtodo de Newton mais eficaz que o mtodo de bisseco. Uma vez que converge mais rpido que outros mtodos, achando desta forma a resoluo em menos tempo e com poucas iteraes. O ltimo mtodo o 1/3 de Simpson, quem consiste em um mtodo de integrao numrica, se baseando em um polinmio interpolador de grau 2. Matemticamente temos:

Para aplicao do mtodo, temos que subdividir o intervalo [a,b] em m(mltiplo de 2). Aplicando na formula anterior:

Com =1 e = 4 se i for mpar e = 2 se i for par. Lembrando que o nmero de subintervalos m deve ser mltiplo de 2, o grau do polinmio interpolador usado.

Exemplo da regra de 1/3 de Simpson

Primeiro se calcula o m, que sero os intervalos necessrios para resoluo

Criando a tabela que auxilia na resoluo. E fazendo as interaes necessria temos o seguinte resultado.

Assim podemos ver que nossa resposta se aproxima de pi(3.14159).

III. Problema Foi proposto a resoluo de diversos problemas atravs de algoritmos numricos. O primeiro mtodo a ser aplicado conhecido como mtodo direto foi o Jordan, o segundo problema um mtodo iterativo, Jacobi. Outros problemas so Mtodo de Bisseo e Mtodo de Newton que sero algoritmos para achar limites e achar equaes algbricasO primeiro problema era a implementao do algoritmo Jordan, um problema que consiste em realizar operaes elementares sobre as equaes do sistema linear ate que reste somente o somente a diagonal principal.1) Implementar utilizando qualquer linguagem de programao o seguinte mtodo para soluo de sistemas lineares: Jordan.O segundo problema consiste em programar o mtodo de Jacobi, mtodo interativo, que decompem a matriz, de forma que a mesma gera a resposta esperada.2) Implementar utilizando qualquer linguagem de programao o seguinte mtodo para soluo de sistemas lineares: Jacobi. A terceira implementao foi o mtodo de bisseo, mtodo que consiste achar os intervalos que contem as razes do sistema. O mtodo consiste em subdividir o intervalo ao meio a cada interao, ate que se encontre uma aproximao do valor da raiz. 3) Implementar utilizando qualquer linguagem de programao o seguinte mtodo para encontrar as razes de uma equao: Bisseo.A ltima implementao requisitada foi a algoritmo do mtodo de Newton, mtodo baseado em fazer a aproximao de curvas por tangente, Geometricamente, o mtodo consiste a aproximar um arco de curva por uma reta tangente.4) Implementar utilizando qualquer linguagem de programao o seguinte mtodo para encontrar as razes de uma equao: Newton.Esses foram os algoritmos propostos. Com o desenvolvimento deles vamos gerar testes que mostrem o funcionamento de cada problema.IV. DesenvolvimentoOs algoritmos foram desenvolvidos no Matlab, por facilitar a processo de programao e o entendimento do algoritmo. O Matlab a ferramenta preferencial para os algoritmos numrico. Alm de levar em considerao os conhecimentos desenvolvido pelos alunos envolvidos na implementao.Para manter a clareza no texto, vamos colocar os cdigos completos no Anexo 1, Evitando assim que linhas de cdigo fiquem no texto. Os algoritmos foram desenvolvidos com base nos pseudocdigos encontrados no livro Campo, Algoritmos Numricos, nesse livro existem boxes com os cdigos, que podem ser facilmente portados para qualquer linguagem.

V. TestesPara testar cada um dos algoritmos propostos, pegamos os exemplos do livro Campos, Algoritmos Numricos, e executamos cada um nos seus respectivos algoritmos e comparamos os resultados.O primeiro Algoritmo teste o Jordan. Esse algoritmo no citado no livro de referncia. Por esse motivo pegamos suas referncias no livro texto Barroso, Calculo Numrico com aplicaes.Teste Jordan (Sada gerada pelo Matlab)Nosso problema o seguinte

Figura 8 - Exemplo proposto no livro Calculo Numrico com aplicaesA sada gerada pelo Matlab ficou da seguinte maneiraGauss-Jordan mtodo:Ab

1000000-2,8352

010000013,2316

00100002,1099

000100027,1104

00001006,1382

0000010-44,3192

000000113,243

Tabela 1 - Resposta do mtodo de JordanAssim o vetor soluo do nosso sistema ficou da seguinte maneira.Xb

x1-2,8352

x213,2316

x32,1099

x427,1104

x56,1382

x6-44,3192

x713,243

Tabela 2 - Sada final do Mtodo de JordanEssa sada compatvel com a sada gerada e apresenta no livro, isso valida nossa implementao e nosso teste. Na matriz gerada pelo sistema possvel ver claramente que somente a diagonal principal existe elementos diferentes de zero, facilitando a resoluo do sistema.Para o segundo teste, o mtodo de Jacobi, vamos usar exemplos proposto no livro Algoritmos Numricos, e depois compara-los com os valores de resposta gerados algoritmo no Matlab.

Figura 9 - Exemplo de Jacobi, proposto no livro Algoritmos Numricos.Passando os parmetros para o Matlab, a sada gerada pelo mesmo foi a seguinte:Mtodo de Jacobi

Iter0123456789

x15,74,794,91955,01024,99554,99875,00014,99955

x22,50,9750,99751,0260,99951,00021,0005111

x3-0,8-2,44-1,953-1,9834-2,0072-1,999-1,99982,0001-2-2

Error-0,342380,0989940,0180930,0052970,0016440,0002880,0000910,0000270,000005

Tabela 3 - Iteraes do mtodo de JacobiCom os resultados gerados pelo algoritmo e pelos mesmos apresentados no livro base, possvel verificar que os resultados so compatveis, isso torna nossa implementao valida e nossos resultados consistentes.Para a terceira implementao requerida, temos o algoritmo da Bisseo. Novamente vamos usar como parmetro de comparao exemplos apresentados no livro texto. O problema proposto o seguinte:

Com os resultados apresentados pelo algoritmo, e pelo exemplo apresentado pelo livro podemos ver que a implementao vlida e corresponde aos valores esperados, para os exemplos testados chegamos a um valor de x=11.7439, esse valor foi obtido depois de 12 iteraes do algoritmo, sendo os parmetros de parada: interaes mximas igual a 100 e erro mximo de 0.005

A tabela a seguir apresenta os resultados do mtodo de bisseo gerados pelo Matlab:IterAFabFbxFxDeltaX

010-6,3206129,483411-14,84971

111-14,8497129,483411,5-7,05940,5

211,5-7,0594129,483411,750,20130,25

311,5-7,059411,759,483411,625-3,69750,125

411,625-3,697511,759,483411,6875-1,81360,0625

511,6875-1,813611,759,483411,7188-0,82230,0313

611,7188-0,822311,759,483411,7344-0,31450,0156

711,7344-0,314511,759,483411,7422-0,05760,0078

811,7422-0,057611,759,483411,74610,07160,0039

911,7422-0,057611,74619,483411,74410,00690,002

1011,7422-0,057611,74419,483411,7432-0,02540,001

1111,7432-0,025411,74419,4834117437-0,00920,0005

1211,7437-0,009211,74419,483411,74390,00110,0002

Tabela 4 - Representao do mtodo da Bisseo

Assim a resposta final 11.7439.O mtodo da bisseo rudimentar. Existem outros que apresentam a resposta com menos passos, tornando-os assim mtodos mais eficientes. Porm, a bisseo apresenta uma grande facilidade de implementao e entendimento.O prximo teste proposto para o mtodo de Newton, como o seguinte exemplo encontrado no livro Algoritmos numricos (Depois de realizar o teste vamos compara-lo com os valores da resoluo encontrados no livro):

A resposta gerada pela implementao no Matlab, ento organizada na tabela a seguir:IterxDFxFx

04234144

13,3846121,825236,4693

23,085380,36826,4056

33,005670,65670,3906

4370,0030,0018

53700

Tabela 5 - Tabela Resultado do Mtodo de Newton

Assim vemos que o resultado 3, isso igual ao exemplo apresentado no livro do algoritmo numrico. Com isso possvel ver que o algoritmo desenvolvido est correto e gerando as sadas esperadas. Se comparamos os mtodos de achar razes, com mtodo da bisseo e de mtodo de Newton implementado. Vemos que o mtodo de newton tende a convergir e gerar a resposta mais rpidoO ltimo algoritmo proposto foi a implementao da regra 1/3 de Simpson, para testar essa regra, vamos transcrever o cdigo presente no livro Algoritmos numrico do autor Frederico Campos. O cdigo junta os mtodos de Newton-Codes e a regra aplicada determinada de acordo com o parmetro n, passado com referncia na chamada da funo. A varivel n pode ser definido como grau do polinmio envolvido na integrao numrica. Para mostrar o funcionamento do cdigo, vamos seguir o exemplo presente no livro texto.

Executando nosso algoritmo no Matlab, com os mesmo parmetros pedidos no exemplo acima, obtivemos as seguintes sadasPara n = 2, temosNewtonCotes(0,pi,2,6)

ix(i)y(i)C(i)

000,00001

10,5235980,50004

21,0471970,86602

31,5707951,00004

42,0943930,86602

52,6179920,50004

63,141590,00001

Tabela 6 - Valores gerados pelo Matlab, para o mtodo de Newton CotesO resultado final o valor da integral encontrado pelo mtodo, esse valor 2.0009.Para n = 3, temos NewtonCotes(0,pi,3,6)

ix(i)y(i)C(i)

000,00001

10,5235980,50003

21,0471970,86603

31,5707951,00002

42,0943930,86603

52,6179920,50003

63,141590,00001

Tabela 7 - Valores gerados pelo Matlab, para o mtodo de Newton CotesPara o segundo caso o valor encontrado para a integral igual a 2.0020. Assim podemos ver que o resultado gerado por n=2, ou seja, pela regra de 1/3 de Simpson fornece um resultado mais exato que resultado gerado pelo mtodo de 3/8 de Simpson. Os valores encontrado so iguais ao apresentados pelo exemplo apresentado no livro, isso mostra que nossas implementaes esto funcionando corretamente.

VI. ConclusesCom tudo apresentado acima, podemos ver o funcionamento e as tcnicas aplicadas para a implementao dos mtodos numricos. Com essas implementaes realizadas podemos observar o funcionamento dos algoritmos.Aps as implementaes e posterior anlise dos resultados encontrados com auxlio dos algoritmos implementados, pode-se concluir que tais mtodos matemticos tericos quando aplicados em um computador possibilita a obteno de um resultado mais preciso, e portanto confivel, em um espao de tempo muito menor em relao ao tempo gasto quando estes problemas so resolvidos mo. Deixando claro desta forma, a importncia que estes mtodos tm quando nos deparamos com problemas mais complexos em outras reas do conhecimento.

BibliografiaCAMPOS FILHO, Frederico Ferreira. Algoritmos Numricos. 2a edio, 2007. Editora LTC. BARROSO, L. et al. Clculo Numrico (com aplicaes), 2 ed., Ed. Harbra, 1987.

Anexo 1 Algoritmos

Algoritmo 1 Jordan

UNIVERSIDADE FEDERAL DE OURO PRETODEPARTAMENTO DE COMPUTAO E SISTEMAS DE INFORMAOINSTITUTO DE CINCIAS EXATAS E APLICADAS

% Gauss-Jordan method% m = numero de linhas% n = numero de colunas[m,n]=size(a);

% este for vai passar por todas as linhas eliminando-as uma a umafor j=1:m-1

% este for realiza o pivoteamento em cada coluna nao nula de cada linha for z=2:m if a(j,j)==0 t=a(1,:);a(1,:)=a(z,:); a(z,:)=t; end end

% este for converte os elementos abaixo da diagonal principal para zeros for i=j+1:m a(i,:)=a(i,:)-a(j,:)*(a(i,j)/a(j,j)); endend

% este for converte os elementos acima da diagonal principal para zerosfor j=m:-1:2 for i=j-1:-1:1 a(i,:)=a(i,:)-a(j,:)*(a(i,j)/a(j,j)); endend

% Este for converte os elementos da diagonal principal para uns (1's)for s=1:m a(s,:)=a(s,:)/a(s,s); x(s)=a(s,n);end

%funo para mostrar os resultadosdisp('Gauss-Jordan method:');ax'

Algoritmo 2 Jacobi

function [x,Iter,CondErro] = Jacobi(n,A,b,Toler,IterMax)%Objetivo: resolver o sistema Ax=b pelo mtodo iterativo de Jacobi%n,A,b,Toler,IterMax = ordem,matriz,vetor independente,tolerancia,numero%maximo de iteracoes%x,Iter,CondErro = vetor solucao,numero de iteracoes e condicao de erro

for i=1:n r=1/A(i,i); for j=1:n if i~=j A(i,j)=A(i,j)*r; end end b(i)=b(i)*r; x(i)=b(i);endIter =0; fprintf('\nIter = %d ' ,Iter); x while 1 Iter = Iter+1; for i=1:n Soma=0; for j=1:n if i~=j Soma=Soma+A(i,j)*x(j); end end v(i)=b(i)-Soma; end NormaNum =0; NormaDen=0; for i=1:n t=abs(v(i)-x(i)); if t>NormaNum NormaNum =t; end if abs(v(i))>NormaDen NormaDen = abs(v(i)); end x(i)=v(i); end NormaRel = NormaNum/NormaDen; fprintf('\nIter = %d ' ,Iter); x fprintf('NormaRel = %f \n',NormaRel); if NormaRel=IterMax break; endendif NormaRel 0 disp(' funcao nao muda de sinal nos extremos do intervalo dado'); Raiz=NaN; Iter=NaN; CondErro=1; return;endDeltaX=abs(b-a)/2;Iter=0;

disp(' Iter a Fa b Fb x Fx DeltaX');while 1 x=(a+b)/2; Fx=f(x); %avaliar a funcao em x fprintf('%2.4f %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f \n',Iter,a,Fa,b,Fb,x,Fx,DeltaX); if(DeltaX0 a=x; Fa=Fx; else b=x; end DeltaX=DeltaX/2; Iter=Iter+1;endRaiz=x;%teste de convergenciaif DeltaX