Baixe o app para aproveitar ainda mais
Prévia do material em texto
TRABALHO DE MÉTODOS COMPUTACIONAIS: SISTEMAS LINEARES Instituto Militar de Engenharia Mestrado em Engenharia Mecânica Tito Magno Lavorato Alves Dacal Data:18/05/2019 1. OBJETIVO Desenvolvimento da interpolação por spline cúbica, código próprio, para resolução do Projeto 2 sobre o fenômeno de Runge, presente no capitulo 5 do livro texto. Comparar a solução do algoritmo desenvolvido com os equivalentes presentes na biblioteca do FGSL do Fortran e a função presente no Matlab. Comparar também para os métodos de spline simples e polinomial, elaborados somente pelo Matlab. 2. DADOS COMPUTACIONAIS Notebook Avell A62, com processador Intel® Core™ i7-8750H CPU 2.20GHz, memória de 16GB DDR4 SDRAM e 250GB SSD M2. 3. SOFTWARE Computador com dual boot, SO Windows 10 e SO Ubuntu 18.04.2 LTS. Os códigos em linguagem Fortran são compilados a partir do terminal do Ubuntu em ambos os sistemas operacionais. Os códigos em Matlab são compilados somente em ambiente Windows. 4. APRESENTAÇÃO DO PROBLEMA Os métodos de aproximação servem, em geral, para a obtenção de valores não tabelados para o caso de funções implícitas ou de difícil obtenção. Os métodos de interpolação de dados são mais utilizados para tratar dados considerados precisos, ou seja, quando se admite que os erros, imprecisões dos dados não existem, ou são mínimos. 4.1 Fenômenos de Runge Segundo RUGGIERO e LOPES (2000) este fenômeno ocorre quando os pontos utilizados para a construção do polinômio interpolador estão igualmente espaçados segundo a Eq.1, indicando que é de se esperar divergencias neste caso. (1) O fenômeno é caracterizado pela oscilação de valores obtidos pelo polinômio interpolador em pontos conhecido, a Fig.1 ilustra o fenômeno. Figura 1- Fenômeno de Runge. Fonte: adaptado de (RUGGIERO e LOPES, 2000). 4.2 Projeto 2 Considerando a função descrita na Eq.2 para o intervalo [a,b] = [-5,5] Constatar o fenômeno de Runge através das alternativas: Pn(x): Polinômio de grau k que interpola f(x) em x0, x1, ...,xk S1(x): Spline linear interpolante em x0, x1, ...,xk S3(x): Spline cúbica interpolante em x0, x1, ...,xk ( ) ( ) (2) Onde x0, x1, ...,xn são (k+1) pontos igualmente espaçados no intervalo [-5,5]. Realize os conjuntos de testes descritos nas Eq. 3, 4 e 5 para k=20. ( ) (3) ( ) ( ) (4) ( ) ( ) (5) Onde : zi= -5 +0,2i, i=1,2,..., 50. 5. METODOLOGIA PARA A RESOLUÇÃO DO PROBLEMA Primeiramente, iniciou-se a implementação do código próprio para Spline cúbica. Após foi implementado os demais códigos referentes à biblioteca FGSL, onde fez se uso do manual GSL e FGSL para determinação das funções e parâmetros necessários para estas. Por último foi elaborado os procedimentos para resolução via Matlab. 5.1 Interpolações por Spline Cúbica Realizou-se a implementação do método de interpolação por Spline cúbica em linguagem Fortran. Está foi realizada utilizando a metodologia de criação da Spline cúbica interpolante presente no livro texto. A partir dos parâmetros de entrada do problema, foi possível determinar o tamanho do sistema que seria trabalhado. Seguindo a metodologia descrita no livro texto é possível simplificar o problema para um problema de resolução de sistemas lineares, a Eq. 6 exemplifica a forma e padrão de montagem do sistema linear. [ ] [ ] [ ] (6) Onde: h: é o passo; g: é o vetor de independentes y: é referente a f(x) O sistema foi montado de forma a se seguir a teoria da Spline natural, onde o comportamento da Spline no início é o mesmo no fim. Foi utilizado o algoritmo de Gauss-Seidel para resolução do sistema linear resultante, obtendo o vetor de independentes g. Conhecendo o vetor de independentes, é possível determinar os coeficientes ak, bk, ck, dk para k=1, 2, ..., n espaços, a obtenção dos coeficientes para o primeiro espaço estão descritos nas Eq. 7, 8, 9 e 10. (7) (8) (9) (10) Conhecendo os coeficientes pode-se determinar a Spline cúbica interpolante referente ao espaço, neste caso S1(x) será obtido através da Eq. 11 ( ) ( ) ( ) ( ) (11) As demais funções interpolantes foram obtidas de forma análoga. Destaca-se que foi necessário determinar quais pontos deveriam ser interpolados segundo o espaço em que pertencem, ou seja, dependendo do espaço estariam submetidas ao comportamento da Spline cubica referente a este espaço. Foram gerados arquivos referentes à função interpolada nos pontos zi e a função analítica calculada para os pontos zi, mostrando o comportamento das duas de forma gráfica e calculando o erro absoluto entre eles. 6. ANÁLISE DOS RESULTADOS OBTIDOS Os resultados obtidos através das interpolações: polinomial, Spline linear e Spline cúbica estão expostas nos tópicos a seguir. 6.1 INTERPOLAÇÕES POLINOMIAIS Os programas para resolução pelo método polinomial foram desenvolvidos no Matlab e no Fortran com auxílio da biblioteca do FGSL, para k=20, como requerido no exercício. A aproximação resultou em um erro absoluto extremamente alto, em ambas as implementações. A Figura 2 ilustra o comportamento da função interpolada. Figura 2- Comportamento da função analítica e interpolada. O erro absoluto calculado segundo a Eq. 3 está descrito na Tab. 1. Tabela 1- Resultado das interpolações polinomiais, 10 amostras. Métodos Utilizados ( ) Tempo [s] Matlab (polyfit) 1223,0841056592 0,050017 Biblioteca FGSL (fgsl_interp_polynomial) 1223,0841056490724 0,003625 Analisando os resultados pode-se afirmar que ambos os métodos convergiram, divergindo somente na oitava casa decimal sendo está uma tolerância mais que aceitável. Em termos de tempo de resolução, fica evidente que o processamento na linguagem Fortran da biblioteca do FGSL apresenta-se como a opção de maior desempenho, tendo está resolvido o problema aproximadamente 13,8 vezes mais rápido. Analisando o tempo de implementação dos códigos, pode-se afirmar que a implementação do código no Matlab se realiza de forma mais rápida, uma vez que se pode obter auxílio na obtenção das funções e sua sintaxe utilizando a função nativa “help”, ressalta-se que durante o processamento da função Polyfit o matlab indicou que esta estava mal condicionada. Enquanto que para a implementação da biblioteca FGSL se teve que buscar auxilia no manual da GSL e da FGSL, entretanto, este processo se torna mais rápido a cada implementação. Observa-se através da Fig. 2 a ocorrência do fenômeno de Runge, como ilustrado na Fig. 1 este ocorre próximo às extremidades. 6.2 SPLINE LINEAR Os programas para resolução pelo método da Spline linear foram desenvolvidos no Matlab e no Fortran com auxílio da biblioteca do FGSL, para k=20, como requerido no exercício. A aproximação resultou em um erro absoluto relativamente pequeno, ilustrado na Tab. 2 Tabela 2- Resultado das interpolações por Spline linear, 10 amostras. Métodos Utilizados ( ) ( ) Tempo [s] Matlab (Interp1) 0,1552 0,013825 Biblioteca FGSL (fgsl_interp_linear) 0,15517 0,0033 Analisando os resultados pode-se, novamente, afirmar que ambos os métodos convergiram, neste caso divergindo somente na quarta casa decimal. Em termos de tempo de resolução, novamente o processamento na linguagem Fortran da biblioteca do FGSL apresenta-se como a opção de melhor desempenho, tendo está resolvido o problema aproximadamente 4,2 vezes mais rápido. O tempo de implementação novamente foi mais rápido em Matlab, mas o tempo de implementação do método pela biblioteca do FGSL, foi relativamente mais rápido que a implementaçãoanterior devido ao fato de as variáveis e procedimentos realizados para a implementação do código de interpolação polinomial ser similares, divergindo em detalhes na declaração destas. A Fig. 3 ilustra o comportamento da interpolação pelo método da Spline linear, observa-se que o método, entre os estudados, se apresentou como o de melhor aproximação, não ocorrendo o fenômeno de Runge. Figura 3- Resultado obtido pelo método da Spline linear 6.3 SPLINE CÚBICA Os programas para resolução pelo método da Spline cúbica foram desenvolvidos no Fortran por código próprio, Matlab e no Fortran com auxílio da biblioteca do FGSL, para k=20, como requerido no exercício. A aproximação resultou em um erro absoluto relativamente pequeno, porém maior do que o obtido pelo método da interpolação por Spline linear, os valores obtidos estão dispostos na Tab.3. Tabela 3- Resultado das interpolações por Spline cúbica, 10 amostras. Métodos Utilizados ( ) ( ) Tempo [s] Matlab (Interp1) 0,2684 0,05384 Biblioteca FGSL (fgsl_interp_linear) 0,268405 0,00375 Fortran (código próprio) 0,268405 0,0018 Analisando os resultados pode-se, novamente, afirmar que ambos os métodos convergiram. Em termos de tempo de resolução, novamente o processamento na linguagem Fortran da biblioteca do FGSL apresenta-se como a opção de melhor desempenho. A diferença de tempo de resolução entre o código próprio e o utilizando a biblioteca do FGSL não é comparável, pois neste caso estão em uma escala muito pequena de tempo, sendo praticamente instantâneo em ambos. O tempo de implementação novamente foi mais rápido em Matlab, mas o tempo de implementação do método pela biblioteca do FGSL, foi novamente mais rápido que a implementação anterior da biblioteca, novamente se atribui ao fato de as variáveis e procedimentos realizados para a implementação do código de interpolação Spline linear ser similar, divergindo em detalhes na declaração das variáveis e funções. A implementação do código próprio é sem duvidas a de maior tempo, além de todo o estudo sobre a questão e escolha de técnicas para resolução desta, busca-se a implementação de um código que aceite diferentes condições iniciais, e que seja adaptável para diversas funções. Ressalta-se também que para a resolução do sistema linear, foi utilizado código próprio. Neste caso, o código de Eliminação de gaus, foi somente adicionado como sub-rotina, porém se este tivesse que ser implementado em conjunto, demandaria mais tempo. A Figura 5 apresenta o comportamento da função interpolada por Spline cúbica. Pode-se observar a ocorrência do fenômeno de Runge. Figura 4- Resultado referente a interpolação por Spline cúbica 7. CONCLUSÃO Analisando os métodos propostos, percebe-se que o método de interpolação por Spline linear se mostrou o mais verossímil, representando melhor o comportamento da função. Neste caso também não foi detectado a ocorrência do fenômeno de Runge, atribui-se isto devido a escolha dos pontos que definiram a função e por esta somente considerar uma Spline de grau 1. Pode-se afirmar também que o método de interpolação polinomial, não é adequado, sendo neste caso a ocorrência do fenômeno de Runge amplificada pelo caráter exponencial da função de interpolação. A Spline cúbica apresenta a ocorrência do fenômeno de Runge, porém neste caso o fenômeno ocorre de forma mais discreta, não resultando em um erro absoluto que inviabiliza-se a utilização deste método. Comparando a analise de resultados, tempos de resolução e de implementação dos códigos pode-se concluir que em termos de resultados todos os métodos convergiram. Em termos de desempenho computacional códigos em Fortran se destacam, resolvendo os problemas de forma mais rápida. Em termos de tempo de implementação realizar um código próprio implica em maior demanda de tempo, visto que podem ocorrer erros no código não ligados a logica deste. Comparando a biblioteca do FGSL e a utilização do Matlab, apesar dos códigos em Matlab terem sidos implementados de forma mais célere, acredito que a utilização das bibliotecas do FGSL acelerou de forma circunstancial a resolução do problema se comparado com a implementação do código próprio. Concluindo, acredito que a utilização da biblioteca do FGSL se apresente como “forma ótima” de implementação de códigos para computação de alto desempenho e defino a utilização do matlab como “forma prática” para esta implementação, isto devido à facilidade e instintividade na utilização deste. Bibliografia ADAMS, J. C. et al. Fortran 90 Handbook. New York: MCGraw-Hill Book Company. BASSI, A. A. Notas de aula da Diciplina de Introdução à Computação Científica. Instituto Militar de Engenharia. Rio de Janeiro. 2019. DOXYGEN. Manual FGSL. [S.l.]. 2014. GALASSI, M. et al. GNU Scientific Library. [S.l.]: [s.n.], v. 2.5, 2018. RUGGIERO, M. A. G.; LOPES, V. L. D. R. Cálculo Numérico Aspectos Teóricos e Computacionais. 2. ed. São Paulo: Pearson Makron Books, 2000. SIQUEIRA, T. G. D. Tutorial Sobre Comandos do MATLAB - Solução de quações Diferenciais, Interpolação, Ajuste Polinomial e Integração. Unicamp. Campinas. 2003.
Compartilhar