Jornada de Iniciação Científica 2007/2008 Ciências da Exatas e da Terra
Análise e Simulações em Mecânica Analítica usando Linguagem Funcional
Grande área do CNPq.:Ciências Exatas e da Terra Área do CNPq: Física Clássica e Física Quântica; Mecânica e Campos Título do Projeto: Análise e Simulações Computacionais da Mecânica Clássica Professor Orientador: Ayrton Monteiro Cristo Filho Estudante PIBIC/PIVIC: Eliezer de Souza da Silva
Resumo: A Mecânica Analítica, através de sua formalização matemática, permite o estudo e a análise de sistemas físicos clássicos. A descrição de sistemas físicos em Mecânica Analítica é baseada no estado energia do sistema, uma abordagem diferente da Mecânica Newtoniana, onde todas as forças devem ser explicitadas. Esta abordagem mais genérica, através das formulações Lagrangiana e Hamiltoniana, permite o estudo de sistemas complexos sem necessariamente conhecer todas as forças de vínculos, mas conhecendo restrições cinemáticas ao movimento. A representação dos métodos da Mecânica Analítica em ambiente computacional permite que estes possam ser formalizados, testados, visualizados e, em alguns casos, generalizados, de modo que o ferramental resultante possa ser aplicado a outros sistemas (Sussman e Wisdom, 2001). Linguagens de Programação Funcionais permitem uma abstração da máquina, dando ênfase à descrição e resolução do problema; toda a computação é feita em termos de definição de funções e são adequadas a problemas de Processamento Simbólico (Abelson e Sussman,1996). Este subprojeto visa fazer uso das potencialidades da programação funcional, através da linguagem de programação Scheme, para representar os métodos da Mecânica Analítica e estruturas físicas do sistema, com o objetivo de simular e, quando possível, resolver numérica e simbolicamente diversos sistemas físicos clássicos.
Palavras chave: Mecânica Clássica, Simulações Computacionais, Análise Simbólica, Programação Funcional.
A Mecânica Clássica estuda o movimento dos corpos materiais. A descrição Newtoniana da
Mecânica Clássica se concentra na determinação das forças envolvidas no movimento do corpo (ou sistema de partículas) e das equações de movimento do corpo. Uma vez conhecidas todas as forças, é aplicada a equação diferencial (1.0) e as chamadas "Leis de Movimento de Newton" para encontrar a equação do movimento do sistema que deve satisfazer a equação diferencial (1.0) durante todo o movimento.
Onde F é força e P é momento linear:
Para sistemas simples onde todas as forças são conhecidas a priori essa abordagem é aplicável, no entanto, nem sempre é possível determinar todas as forças. Existem, por exemplo, casos de forças de vínculos que são difíceis de serem determinadas a priori, podendo mesmo não ser possível expressá-las
Jornada de Iniciação Científica 2007/2008 Ciências da Exatas e da Terra explicitamente. Nestas situações a abordagem newtoniana se torna inadequada. Outro ponto importante de se notar é que a equação (1.0) pressupõe um sistema cartesiano de coordenadas para representar as grandezas vetoriais, o que não é adequado para diversos problemas (por exemplo, para um pêndulo simples somente o ângulo entre o pêndulo e a vertical é suficiente para descrever o seu movimento). Em suma, na Mecânica Newtoniana, o conceito de "Força", que é uma grandeza vetorial, é fundamental na descrição do movimento.
A Mecânica Analítica surgiu como uma reformulação da Mecânica Clássica, em que os princípios físicos fundamentais da Mecânica foram expressos formalmente em uma matemática refinada. Se por um lado a Mecânica de Newton se baseia fundamentalmente em aspectos geométricos e vetoriais, tal como a força, na mecânica analítica o movimento do sistema pode ser expresso por grandezas escalares (ângulos, energia, etc). No formalismo Lagrangiano é definida uma grandeza que para muitos sistemas pode ser definida como a diferença entre energia cinética e potencial, chamada de Lagrangiano, dependente somente do tempo, da configuração e da taxa de variação da configuração do sistema. O princípio de "Ação Mínima" (conhecido também como princípio de Hamilton) diz que conhecido o Lagrangiano do sistema, pode-se distinguir a trajetória que é solução do sistema das demais através da integral do Lagrangiano para esta trajetória (integral da Ação ou simplesmente Ação), integral esta que deve ser estacionária para trajetória real do sistema. Resultados de Euler e Lagrange mostram que a trajetória que satisfaz este princípio é solução de uma certa equação diferencial, conhecida por equação de Euler- Lagrange(1.2) (Sussman e Wisdom, 2001).
d dt ∂L
Na equação (1.2), L é o Lagrangiano do sistema e as derivadas parciais são calculadas em relação às coordenadas genéricas do sistema (e suas derivadas temporais). Coordenadas Genéricas são parâmetros (n variáveis) com os quais é possível descrever univocamente a configuração do sistema a cada instante, obedecendo às restrições de natureza cinemática impostas ao movimento (para um sistema com n coordenadas genéricas, obtém-se um sistema de n equações de Euler-Lagrange) (Lemos, 2004).
Essa formulação traz uma série de conveniências e generalizações sobre a anterior (Newtoniana): não é mais necessário conhecer todas as forças que atuam sobre o sistema, pois seu estado é totalmente descrito por uma função escalar, que pode ser encontrada em termos da energia, e a equação de Euler- Lagrange pode ser utilizada para qualquer sistema de coordenada (ou em coordenadas genéricas). Além das vantagens acima, através desta formulação não é necessário conhecer inicialmente as forças de vínculo, pois podem-se expressar os vínculos através de funções que limitem algumas possíveis trajetórias ou posições do sistema. Estes vínculos podem ser acoplados às equações de Lagrange, de modo que a solução das equações satisfaça automaticamente às restrições impostas ao movimento.
As linguagens de programação funcional permitem ao programador uma abstração da máquina, permitindo assim o foco na descrição e resolução do problema. Em programação funcional os algoritmos e programas são expressos através de definições e composição de funções. Devido às características citadas, as linguagens de programação funcional são adequadas à programação e modelagem computacional de fenômenos físicos. Neste subprojeto o aluno estudou a linguagem Scheme, um dialeto da linguagem Lisp, com uma sintaxe simples, clara e com poucas regras (Abelson e Sussman, 1996). Scheme conta com uma biblioteca, conhecida por Scmutils, que implementa operadores genéricos da
Jornada de Iniciação Científica 2007/2008 Ciências da Exatas e da Terra linguagem sobre uma variedade de objetos matemáticos e contem ricas ferramentas de processamento simbólico e numérico (Sussman e Wisdom, 2001).
O objetivo principal deste subprojeto é o estudo de diversos sistemas físicos clássicos, utilizando as ferramentas adquiridas no estudo da Mecânica Analítica, descrevendo-os na linguagem de programação funcional Scheme. Pretendeu-se com este projeto avaliar a adequação do uso de linguagens funcionais, especificamente o Scheme e da biblioteca Scmutils, para descrever problemas de Mecânica Clássica, além de incentivar uma notação matemática clara, sem ambigüidades e a formalização dos processos e métodos de resolução de sistemas físicos clássicos.
Ao longo da execução das atividades do projeto diversos métodos de modelagem e simulação computacional foram utilizados de modo a avaliar os melhores métodos. Através dos métodos utilizados, simulações e programas implementados, foram desenvolvidas ferramentas que poderão ser utilizadas na análise de outros sistemas físicos.
Para alcançar os objetivos supracitados foram definidas quatro etapas do projeto, cada uma delas possuindo alguns objetivos específicos: estudo de Programação Funcional, estudo das formulações Lagrangiana e Hamiltoniana, implementação das análise e simulações em Mecânica Analítica.
Durante o primeiro estágio do projeto, Estudo de Programação Funcional, o aluno estudou a linguagem Scheme. Foi feito um estudo dirigido do livro How to Design Programs (Felleisen et al, 2001), no qual o aluno estudou as seções do livro, implementou alguns exemplo e resolveu os exercícios. O aluno apresentou uma série de seminários internos ao grupo de pesquisa e foram feitas reuniões semanais com o orientador, na medida em que avançava no estudo dirigido. Nos seminários foram expostos o conteúdo estudado, programas desenvolvidos, aplicações e exemplos.
O estudo da linguagem Scheme foi acompanhado da implementação de programas com relevante importância para o curso do projeto, de modo a avaliar as potencialidades do uso da linguagem nas etapas seguintes. Para citar alguns exemplos, foram desenvolvidos programas que implementam o cálculo simbólico e numérico de derivadas, métodos numéricos de quadratura (integração numérica), resolução de equações não-lineares (Newton-Raphson, Ponto Fixo) e álgebra de matrizes.
No final desta etapa do projeto o aluno participou do Ciclo de Seminários CEUNES 2007/2, onde foi apresentada a palestra intitulada Programação Funcional – Scheme. Na apresentação foram expostos os conceitos fundamentais de programação funcional e alguns programas desenvolvidos no âmbito do projeto, introduzindo para tal a linguagem Scheme.
Na segunda etapa, o estudo das Formulações Lagrangina e Hamiltoniana foi feito através de reuniões com o grupo de pesquisa e orientador. No grupo de pesquisa foram discutidos os temas relativos à Mecânica Analítica através de palestras e aulas sobre o assunto.
Na etapa de implementação, foi escolhido um sistema físico e aplicando os métodos da Mecânica
Analítica foi feita a descrição do movimento. A modelagem computacional foi feita seguindo o seguinte esquema: como passo inicial, descreve-se o Lagrangiano do sistema em linguagem funcional, em seguida utiliza-se o Lagrangiano para encontrar as equações do movimento. Para tal procede-se de duas maneiras
Jornada de Iniciação Científica 2007/2008 Ciências da Exatas e da Terra distintas: pode-se gerar uma trajetória que minimiza a integral da ação através de métodos de minimização multidimensional e de interpolação de funções (disponíveis na Scmutils); ou então, aplicamse as equações de Euler-Lagrange para gerar um sistema de equações diferenciais cuja solução é a trajetória do sistema físico (Sussman e Wisdom, 2001). A biblioteca Scmutils disponíbiliza funções e procedimentos para resolver sistemas de equações diferenciais. Sempre que possível foram feitas comparações entre os resultados obtidos e dados da literatura.
No Estudo de Programação Funcional foram implementadas várias funções e programas, explorando as características da linguagem Scheme. Programas usuais em linguagens funcionais foram implementados, tais como ordenação, pesquisa, filtro e mapeamentos (filter e map, funções comuns em diversas linguagens funcionais, o filter seleciona os elementos de uma lista que satisfazem alguma propriedade definida por uma função, e o map aplica uma função sobre cada elemento da lista).
Para exemplificar os conceitos estudados é colocado abaixo o código de uma função que faz o cálculo simbólico de derivadas. Para tal são usadas listas como estrutura de dados, e símbolos como representação dos dados e operadores simbólicos, o primeiro elemento da lista é um símbolo para a operação seguido dos operandos, por exemplo, sin(x) seria representado por (list 'sin 'x) e sen(x)+cos(x) por (list '+ (list 'cos 'x) (list 'sin 'x)). Este programa supõe a existência de algumas funções adicionais: funções que determinam qual é a operação (soma?, mult?,...), que criam uma estrutura (lista) com operadores e operandos (make-soma, make-mult,...) e retornam os operandos de uma dado operação (soma-a, soma-b, pot-base,...). A idéia básica do algoritmo é transformar uma operação em outra aplicando as regras de diferenciação e, usando a regra da cadeia, recursivamente aplicar o algoritmo para cada operando da operação processada. Segue o código em linguagem Scheme do algoritmo.
(define (D f x) (cond ((number? f) 0) ((symbol? f) (if (eqv? f x) 1 0)) ((soma? f) (make-soma (D (soma-a f) x) (D (soma-b f) x))) ((mult? f) (make-soma (make-mult (mult-a f) (D (mult-b f) x)) (make-mult (mult-b f)
(D (mult-a f) x)))) ((seno? f) (make-mult (make-cosseno (seno-a f)) (D (seno-a f) x))) ((cosseno? f) (make-mult (make-mult (- 1) (make-seno (cosseno-a f))) (D (cosseno-a f) x))) ((pot? f) (cond ((eqv? (pot-expoente f) 0) 1) ((eqv? (pot-expoente f) 1) (D (pot-base f) x)) (else (make-mult (pot-expoente f) (make-mult (make-pot (pot-base f) (- (pot-expoente f) 1)) (D (pot-base f) x))))))))
Neste exemplo é importante observar a facilidade de descrição do problema matemático em linguagem funcional e como a recursão aparece naturalmente na descrição destes problemas. Para avaliar a expressão resultante para algum valor numérico deve-se antes definir uma função que avalie a expressão, substituindo cada ocorrência do símbolo que denota a variável pelo valor numérico.
Outras funções do Cálculo Numérico que seriam necessárias posteriormente no curso do projeto foram implementadas, tais como integração numérica, método de Newton-Raphson para estimar raízes de funções, etc.
Após a conclusão do estudo da linguagem Scheme seguiu-se o estudo do formalismo Lagrangiano e Hamiltoniano. O formalismo Lagrangiano foi introduzido nas reuniões do grupo de pesquisa seguindo o livro Mecânica Analítica (Lemos, 2004). Foram estudados vínculos como restrições cinemáticas ao movimento (definição geral e vínculos holônomos), deslocamentos virtuais e trabalho virtual, onde se definiu vínculo ideal como aquele cujo trabalho virtual é nulo; e em seguida introduziu-se o Princípio dos Trabalhos Virtuais, fazendo distinção entre trabalho virtual das forças aplicadas e das forças de vínculo (que para vínculos ideais é nulo). Estendeu-se então o princípio de Trabalhos Virtuais para a Dinâmica, explorando assim o Princípio de d'Alembert. Definiu-se então as coordenadas generalizadas e forças generalizadas Qi (aplicando o princípio de d'Alembert), foi encontrada uma equação semelhante à equação de Euler-Lagrange para as forças generalizadas e energia cinética T (Lemos, 2004).