Relatório do projecto computacional grupo 72

210 visualizações

Publicada em

  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Relatório do projecto computacional grupo 72

  1. 1. Relatório do Projecto - Matemática Computacional Relatório do Projecto Computacional Disciplina: Matemática Computacional Curso: Mestrado Integrado em Engenharia Mecânica Ano lectivo 2013/2014 Grupo: 72 Nome: Rafael Lucas, Nº 75521 Nome: Luís Brazão, Nº 76081 Nome: Pedro Alves, Nº 74064 Enunciado MN-41Recorrendo ao conceito de diferenças finitas, desenvolva uma implementação computacional em MatLab pelo método de Euler progressivo, para a solução do problema de pequenas oscilações de um pequeno cilindro que roda no interior de outro maior (sem escorregar). Este movimento rege-se pela equação diferencial d2 (theta) /dt2+g/ (3/2* (R-r)) *theta=0. Considerando um raio do maior cilindro de 0.75m e o raio do menor de r=0.10m, constante g=9.8 ms-2. Considere theta o ângulo entre a linha de centros dos cilindros e a vertical que passa no centro do maior cilindro. Determine o período das oscilações. Apresente gráficos da posição e velocidade angular versus da aproximação obtida em função da variável tempo t para três períodos. Estude a convergência com o incremento de tempo utilizado. Assinaturas: ________________________ ________________________ ________________________
  2. 2. Relatório do Projecto - Matemática Computacional 1. Breve introdução teórica O Método de Euler é um dos métodos numéricos usados para integrar equações diferenciais ordinárias (EDO’s). Estas equações envolvem uma função (geralmente designada por y) de uma só variável (usualmente t), e um número finito de derivadas dessa função. O Método de Euler é usado nestas equações, no entanto é necessário completá-las com uma condição inicial (y(t0) = y0) de modo a obtermos uma solução. Este problema é conhecido como Problema de Valor Inicial (PVI), o qual pode ser apresentado da seguinte forma: 𝑦 ′ = 𝑓(𝑡, 𝑦(𝑡)) { (1) 𝑦(𝑡0) = 𝑦0 O problema consiste em determinar a partir de (1) a relação entre a variável t e a função y. As equações deste tipo podem ser usadas como modelos matemáticos numa grande variedade de problemas com inúmeras aplicações. No nosso caso, relaciona a posição angular e a velocidade angular com o tempo, para o problema indicado no enunciado. Os métodos analíticos, permitem encontrar explicitamente a função y(t). No entanto, no caso de a função ser muito “complexa”, esses métodos revelam-se ineficazes. Portanto, existe a necessidade de recorrer a métodos numéricos, como o método de Euler, o qual oferece soluções aproximadas ao invés das soluções exactas. Assim, os métodos numéricos dão-nos valores de y correspondentes apenas a um conjunto finito de valores de t e a solução é obtida como uma tabela de valores, em vez de através de uma função contínua. Ao utilizar este método na resolução de EDO’s obtemos soluções aproximadas num conjunto de pontos tn do intervalo I = [t0,T]. Deste modo, em vez da solução exacta, ficamos a conhecer os valores aproximados, logo diz-se que o problema foi discretizado. O processo de discretização pode ser apresentado da seguinte forma: Seja I = [t 0,T] o intervalo de integração, vamos considerar uma sucessão de nós de discretização de I, tn = t0 + nh (n=0,1,..,N), com h>0, e N o máximo do inteiro tal que tn = T. Essa sucessão tn define subintervalos de I : In = [tn, tn+1]. Em geral, define-se ℎ = tn+1 - tn , e designa-se por tamanho do passo. No método em questão, assume-se que para uma pequena distância ∆t (=h) a partir de um ponto inicial t0, a função 𝑓(𝑡, 𝑦(𝑡)) é uma constante igual a 𝑓(𝑡0, 𝑦0). Ao admitirmos que 𝑓(𝑡, 𝑦(𝑡)) = 𝑓(𝑡0, 𝑦0) para todos os valores de t0 e t1= t0 + h, então a alteração ∆y em y corresponde à pequena alteração ∆t em t e é dada, aproximadamente, por: ∆𝑦 = 𝑓(𝑡0, 𝑦0) ∆𝑡 (2) Ao representarmos y1 por y0 + ∆y, da equação anterior resulta que: 𝑦(1) = 𝑦(0) + ℎ ∗ 𝑓(𝑡0, 𝑦0) (3) A condição inicial fornece os valores de t0 e y0, e então pode-se calcular o valor de y1 e todos os valores seguintes, ficando assim a solução geral segundo o método de Euler (progressivo): yi+1 = yi + h * f(ti,y(ti)) , i = 0,1..,N-1 (4) onde f(ti,yi) = y’(ti). Este método designa-se progressivo porque permite calcular yi+1 explicitamente a partir de yi. O processo de cálculo prossegue, intervalo a intervalo, a partir de t0, até um ponto final desejado. Mestrado Integrado em Engenharia Mecânica - 2013/14 1
  3. 3. Relatório do Projecto - Matemática Computacional Neste trabalho recorremos ao software Matlab para a implementação deste método. 2. Algoritmos do método Para a implementação do método de Euler em MATLAB, utilizaram-se neste trabalho os algoritmos a seguir indicados. A1. Algoritmo para a entrada de dados: Ler l (tempo de análise) Ler h (tamanho do passo da malha) Ler ang(1) (condição inicial, valor inicial da posição angular) Ler vel(1) (condição inicial, valor inicial da velocidade angular (primeira derivada da posição angular(ang’ = vel) A2. Algoritmo para a implementação do método de Euler: Criar um vector t, com os diferentes valores de ti (ti = t0 + i*h). Ciclo de i = 1,2,., r -1 (Seja r o tamanho do vector t) angi+1 = angi + h * veli veli+1 = veli - p*h* angi Fim do ciclo A3. Algoritmo para o cálculo da solução exacta da equação diferencial dada no enunciado: Seja pos a solução exacta da posição angular e omega a solução exacta da velocidade angular. (A expressão da solução exacta foi calculada analiticamente). c = ang(1) m = 3.1704 d = vel(1)/m pos(1) = ang(1) omega(1) = vel(1) Ciclo de i=1,2,.., r-1 posi+1 = c*cos(m*ti+1) + d*sen(m*ti+1) omegai+1 = -m*c*sen(m*ti+1) + m*d* cos(m*ti+1) Fim do ciclo A4. Algoritmo para o cálculo do erro global de discretização (da posição e da velocidade angulares): Ciclo de i=1,2,.., k (Seja k o tamanho do vector pos) erroposi = |angi – posi| Fim do ciclo Ciclo de i=1,2,..,k (Seja k o tamanho do vector pos(igual ao tamanho do vector omega) erromegai = |veli – omegai| Fim do ciclo A5. Algoritmo para o cálculo do majorante do erro de truncatura para cada passo (da posição e velocidade angular): (Para implementar este algoritmo, resolvemos analiticamente a segunda e terceira derivada de pos) errotruncang1 = 0 Ciclo i = 1,2,.., r-1 ymaxi = máximo do módulo da função: -(3.1704^2)*c*cos(m*x) (3.1704^2)*d*sin(m*x)), para cada intervalo [ti,ti+1]. errotruncangi+1 = ((h)/2)* ymaxi Fim do ciclo Mestrado Integrado em Engenharia Mecânica - 2013/14 2
  4. 4. Relatório do Projecto - Matemática Computacional Acima apenas está explicado o algoritmo para o caso da posição angular, pois o procedimento para a velocidade angular é idêntico. A6. Algoritmo para o cálculo dos períodos das ondas sinusoidais da velocidade e da posição angular (da solução exacta e da solução numérica) e para o cálculo do erro dos períodos: (Neste caso usou-se uma interpolação linear para calcular o período) indices = vector de zeros com tamanho g(tamanho do vector t) Ciclo de i=1,2,..,g se posi > 0 e posi+1 < 0 indicesi = 1 indicesi+1 = 1 fim fim do ciclo d = vector que guarda as posições onde o vector índices tem valor 1 (Interpolação linear :) ta = (-posd1/(posd2-posd1))*(td2-td1) + td1 ta2 = (-posd3/(posd4-posd3))*(td4-td3) + t(d3) periodopos = ta2 – ta O cálculo do resto dos períodos é idêntico a este, só difere nas variáveis. 3. Aspectos da implementação dos algoritmos Na implementação do algoritmo A1, o programa pede ao utilizador para introduzir as variáveis necessárias para se implementar o método em questão: o tempo de análise, o tamanho do passo da malha, o valor inicial da posição angular e da velocidade angular. O programa guarda estes dados respectivamente nas variáveis: l, h, ang(1) e vel(1). O algoritmo A2 é utilizado para implementar o método de Euler nas condições indicadas pelo utilizador. Usou-se um ciclo (for) que calcula a solução aproximada através do método de Euler progressivo da posição angular (ang) e da velocidade angular (vel) em função do tempo, em cada ponto ti. Note-se que o valor da posição e velocidade angular no instante incial (t0), são dados pelo utilizador e são respectivamente ang(1) e vel(1). No algoritmo A3, é calculada a solução analítica da equação diferencial de segundo grau dada no enunciado para cada ponto ti. Para tal usou-se também um ciclo (for) que calcula a solução exacta da posição (pos) e velocidade angular (omega) em cada ponto t i. Notese que o valor da posição e da velocidade angular t0 são inseridos pelo utilizador no algoritmo A1, pois trata-se de um problema de valor inicial. Assim, tem-se: ang(1)=pos(1) e vel(1)=omega(1). O algoritmo A4 é usado para calcular o erro global de discretização em cada ponto i. Para tal usámos dois ciclos: o primeiro calcula o erro em cada ponto i da posição angular, para tal calculamos o valor absoluto da subtracção do valor aproximado (ang) ao valor exacto (pos) em cada ponto. O segundo ciclo, procede da mesma maneira, mas para a velocidade angular, cujo valor aproximado é vel e o valor exacto é omega. No algoritmo A5 calcula-se o majorante do erro de truncatura para casa passo associado ao método de Euler na determinação da posição e velocidade angular. O erro de truncatura pode ser majorado da seguinte forma: Tn+1 = h*sup| 𝑓′(𝑡, 𝑦(𝑡))|, (usando a notação da secção 1), onde t está entre os valores ti e ti+1. Para calcularmos o supremo do módulo de Mestrado Integrado em Engenharia Mecânica - 2013/14 3
  5. 5. Relatório do Projecto - Matemática Computacional 𝑓′(𝑡, 𝑦(𝑡)), recorremos a um ciclo no qual utilizámos a função fminbnd do MATLAB. (A função 𝑓′(𝑡, 𝑦(𝑡)) foi calculada analiticamente). O ciclo dá-nos o valor do majorante do erro de truncatura em cada ponto i, sendo que no ponto inicial, o erro de truncatura é zero, pois no ponto inicial ainda não tinha ocorrido nenhum passo do método de Euler. Para calcular o majorante do erro de truncatura para casa passo na determinação da velocidade angular procedeu-se da mesma forma, mas em vez de se utilizar sup| 𝑓′(𝑡, 𝑦(𝑡))|, usou-se sup| 𝑓′′(𝑡, 𝑦(𝑡))|. No algoritmo A6 calcula-se o período de cada onda sinusoidal da posição e velocidade angular, tanto para a solução exacta como para a solução analítica e calcula-se o respectivo erro efectivo dos períodos. No cálculo dos períodos, usou-se uma interpolação linear para calcular em que pontos t, o valor da posição e velocidade eram zero. Vamos só explicar o procedimento para o cálculo do período no caso da onda da posição angular exacta, pois os outros calculam-se através do mesmo procedimento. Para tal, criou-se um vector índices de zeros e de tamanho do vector t. De seguida criou-se um ciclo em que se pos(i) >0 e pos(i+1) <0 , então o vector indices nas posições i e i+1, fica com o valor 1. De seguida criou-se um vector d que encontra as posições i onde indices(i) = 1 (para tal utilizou-se a função find. Depois, recorremos a uma interpolação linear, pois o intervalo entre os pontos i e i+1 é tao pequeno (h) que se aceita esta aproximação. Como o vector d guarda as posições i e i+1, onde pos(i) > 0 e pos(i+1) < 0, então podemos aplicar uma interpolação linear utilizando esses pontos (pos(d(i))). Em anexo encontra-se explicada como se utilizou a interpolação linear. 4. Aplicação do método e discussão de resultados Para as aplicações de teste deste método considerámos vários valores inseridos pelo utilizador, de modo a mostrarmos como é feita a implementação do método e fazemos uma análise dos erros associados ao mesmo. Para tal, criámos um menu onde o utilizador pode escolher a opção Inserir condições iniciais. No papel do utilizador, no primeiro caso teste inserimos os seguintes dados: Tempo de análise – 5s, Intervalo de tempo – 0.01s, Ângulo inicial – pi/10 rad, Velocidade angular inicial – 0 rad/s. De seguida voltamos ao menu e escolhemos a segunda opção Calcular solução numérica pelo método de Euler progressivo. Esta opção implementa o método em questão e calcula a solução numérica para as condições indicadas inicialmente. Ao escolher a terceira opção obtemos os gráficos da posição e velocidade angular em função do tempo, tanto para a solução exacta como numérica: Mestrado Integrado em Engenharia Mecânica - 2013/14 4
  6. 6. Relatório do Projecto - Matemática Computacional Figura 1 Gráficos da posição angular e velocidade angular em função do tempo Analisando os gráficos, podemos ver que o erro global aumenta ao longo do tempo como podemos confirmar analisando os gráficos a seguir, escolhendo a quarta opção do menu: Figura 2 Gráficos do erro global de discretização em função do tempo (escala logarítmica) Observamos que o erro global aumenta ao longo do tempo tanto para a posição angular como para a velocidade angular. No entanto, observa-se que existem certos pontos onde o erro decresce devido à onda da posição e da velocidade angular ser sinusoidal. De seguida, criámos um algoritmo para calcular o majorante do erro de truncatura em cada passo cometido pela aproximação associada ao método de Euler (para a posição e velocidade angular), o qual cria um gráfico do mesmo em função do tempo: Mestrado Integrado em Engenharia Mecânica - 2013/14 5
  7. 7. Relatório do Projecto - Matemática Computacional Figura 3 Gráficos do majorante do erro de truncatura em função do tempo (escala logarítmica) Este erro dá-nos o erro cometido de passo em passo, ou seja, o erro cometido do ponto i para o ponto i+1. Observando os gráficos, podemos ver que o majorante do erro de truncatura tem um majorante para si mesmo, ou seja, o erro cometido de um passo para o seguinte nunca é maior do que um determinado valor. De seguida, calculamos os períodos da onda da posição e da velocidade angular (exactas e numéricas), usando uma interpolação linear, e calculamos o erro efectivo dos períodos, escolhendo a opção 8 seguida da 7, do menu. Ao fazermos isto, é nos apresentado no prompt do Matlab o seguinte: O período da onda da posição angular(solução exacta) é: 1.981827 s O período da onda da posição angular(solução numérica) é: 1.982507 s O período da onda da velocidade angular(solução exacta) é: 2.299054 s O período da onda da velocidade angular(solução numérica) é: 1.982506 s O erro efectivo do período da onda sinusoidal da posição angular entre a solução exacta e a numérica é: 0.000679 O erro efectivo do período da onda sinusoidal da velocidade angular entre a solução exacta e a numérica é: 0.316548 Para fazermos uma melhor análise do método de Euler e do erro associado ao mesmo, considerámos um exemplo de teste em que as condições iniciais são iguais, à excepção do Intervalo de tempo que em vez de ser 0.01s é 0.0001s, ou seja, o passo efectuado do ponto i para o i+1 é igual a 0.0001 (que corresponde ao h na equação (4) da secção 1). Efectuámos o mesmo procedimento do teste anterior, e obtivemos os seguintes resultados: Mestrado Integrado em Engenharia Mecânica - 2013/14 6
  8. 8. Relatório do Projecto - Matemática Computacional Figura 4 Gráficos da posição angular e velocidade angular em função do tempo Como podemos ver ao observar estes gráficos, a solução numérica e a exacta quase que coincidem em todos os pontos. Comparando com o exemplo anterior, concluímos que ao considerar um h (tamanho do passo) menor, o erro global e de truncatura também diminuem. Assim, quando o h tende para zero, o erro associado ao método de Euler também tende para zero, como podemos observar pelos seguintes gráficos: Figura 5 Gráficos do erro global de discretização em função do tempo (escala logarítmica) Mestrado Integrado em Engenharia Mecânica - 2013/14 7
  9. 9. Relatório do Projecto - Matemática Computacional Figura 6 Gráficos do majorante do erro de truncatura em função do tempo (escala logarítmica) Calculando os períodos e o erro efectivo como foi feito no primeiro exemplo obtemos o seguinte: O período da onda da posição angular(solução exacta) é: 1.981827 s O período da onda da posição angular(solução numérica) é: 1.981843 s O período da onda da velocidade angular(solução exacta) é: 2.297272 s O período da onda da velocidade angular(solução numérica) é: 1.981843 s O erro efectivo do período da onda sinusoidal da posição angular entre a solução exacta e a numérica é: 0.000015 O erro efectivo do período da onda sinusoidal da velocidade angular entre a solução exacta e a numérica é: 0.315430 Como podemos ver também o erro efectivo dos períodos é menor, como seria esperado. Assim, podemos concluir que o método de Euler é tão mais eficaz quanto menor for a variável h. No entanto, para valores muito pequenos de h, o esforço computacional aumenta, diminuindo assim a eficiência desejada na aplicação destes métodos. Um método numérico diz-se convergente se o erro global de discretização tender para zero se o incremento de tempo (h) utilizado tender para zero. Podemos concluir analisando os gráficos atrás apresentados que o erro global tende para zero quando h tende para zero, assim, o método de Euler diz-se convergente. 5. Referências [1] Pina, H., “Métodos Numéricos”, Escolar Editora, 2010. [2] M. Teresa Diogo, Murilo Tomé. “Matemática Computacional- Notas de Aulas”, secção de folhas do IST, IST, 2009. Mestrado Integrado em Engenharia Mecânica - 2013/14 8
  10. 10. Relatório do Projecto - Matemática Computacional [3] Mário Rosa, “Tópicos de análise numérica- métodos numéricos”, Departamento de matemática, Universidade de Coimbra, 1992 Nota: Para a melhor visualização dos gráficos apresentados ao longo do documento, foi necessário o incremento de número de páginas do relatório. Anexo A - Como utilizar o programa Para o utilizador utilizar o programa desenvolvido por nós, basta escrever “eulermenu” no prompt do MatLab. Assim, aparece um menu com várias opções. A primeira opção, “Inserir condições iniciais”, permite ao utilizador inserir os valores das condições iniciais do problema em questão. A segunda opção, “Calcular solução numérica pelo método de Euler progressivo”, calcula a solução aproximada da posição e velocidade angular pelo método de Euler. A terceira opção, “Gráficos da posição e velocidade angular em função do tempo (exactas e aproximadas)”, cria dois gráficos: o primeiro relaciona a posição angular com o tempo de análise, tanto a solução exacta como a solução numérica; o segundo relaciona da mesma forma a velocidade angular com o tempo. A quarta opção, “Gráficos do erro global de discretização em função do tempo”, cria dois gráficos, relacionando o erro global de discretização como tempo, para a posição e velocidade angular. A quinta opção do menu, “Gráficos da posição e velocidade angular (exactas) com barras de erro de discretização global”, cria dois gráficos: um da posição angular (exacta) em função do tempo com as barras de erro global de discretização em cada ponto; o segundo, procede da mesma maneira para a velocidade angular. A sexta opção, “Gráficos do majorante do erro de truncatura em função do tempo”, cria também dois gráficos que relacionam o majorante do erro de truncatura com o tempo, para a posição e velocidade angular. A sétima opção, “Calcular os períodos das ondas da posição e velocidade angular (exactas e aproximadas)”, calcula os períodos das ondas da posição e velocidade angular, exactas e aproximadas, e escreve no prompt do MatLab os respectivos valores. Por fim, a oitava opção, “Calcular o erro efectivo dos períodos”, calcula o erro efectivo associado aos períodos das ondas sinusoidais da posição e velocidade angular, exactas aproximadas, escrevendo no prompt os respectivos valores. Anexo B – Listagem do código em MatLab %Menu para a implementação dos algoritmos choice = menu('Método de Euler Progressivo','Inserir condições iniciais','Calcular solução numérica pelo método de Euler progressivo','Gráficos da posição e velocidade angular em função do tempo(exactas e aproximadas)','Gráficos do erro global de discretização em função do tempo','Gráficos da posição e velocidade angular (exactas) com barras de erro de discretização global','Gráfico do majorante do erro de truncatura em função do tempo','Calcular os períodos das ondas da posição e velocidade angular (exactas e aproximadas)','Calcular o erro efectivo dos períodos','Sair'); switch choice case 1 lerdados eulermenu case 2 euler eulermen case 3 sol eulermenu case 4 erroglobal eulermenu Mestrado Integrado em Engenharia Mecânica - 2013/14 9
  11. 11. Relatório do Projecto - Matemática Computacional case 5 erro eulermenu case 6 errotruncatura eulermenu case 7 periodosposicao periodovelocidade eulermenu case 8 erroefectivo eulermenu case 9 end %------------------------------------------------------------------------%------------------------A1: Ler dados-------------------------------%------------------------------------------------------------------------clear; clc; l = input('Tempo de análise(ex: 10) : '); h = input ('Intervalo de tempo(ex: 0.001) : '); ang = size(l); vel = size(l); ang(1) = input('Ângulo inicial(ex: pi/10) : '); vel(1) = input('Velocidade inicial(ex: 0) : '); g = 9.8; R = 0.75; r = 0.10; p = g/((3/2)*(R-r)); %-------------------------------------------------------------------------%------------A2: Implementação do método de Euler progressivo %-------------------------------------------------------------------------t = 0:h:l; for i = 1:(length(t)-1) ang(i+1) = ang(i) + vel(i)*h; vel(i+1) = vel(i) - p*h*ang(i); end; %--------------------------------------------------------------------------------------%------A3 Solução analítica da equação diferencial dada no enunciado----%--------------------------------------------------------------------------------------omega = size(l); pos = size(l); pos(1) = ang(1); omega(1) = vel(1); c = ang(1); m = 3.1704; d = vel(1)/(m); for i = 1:(length(t)-1) pos(i+1) = c*cos(m*t(i+1)) + d*sin(m*t(i+1)); omega(i+1) = -m*c*sin(m*t(i+1)) + m*d*cos(m*t(i+1)); end %----------------------------------------------------------------------------------------%------- Gráficos das soluções exactas e aproximadas (posição angular------%-------e velocidade angular) em função do tempo------------------------------%----------------------------------------------------------------------------------------figure(1) subplot(1,2,1), plot(t,ang,'b',t,pos,'r--'); title('Posição Angular em função do tempo') xlabel('Tempo,s') ylabel('Deslocamento Angular, rad') Mestrado Integrado em Engenharia Mecânica - 2013/14 10
  12. 12. Relatório do Projecto - Matemática Computacional grid legend ('Solução aproximada','Solução exacta') subplot(1,2,2), plot(t,vel,'b',t,omega,'r--'); title('Velocidade Angular em função do tempo') xlabel('Tempo,s') ylabel('Velocidade Angular, rad/s') grid legend ('Solução aproximada','Solução exacta') %-------------------------------------------------------------------------%----------A4 Erro global de discretização da posição angular--%-------------------------------------------------------------------------erropos = size(pos); for i=1:length(pos) erropos(i) = abs(ang(i)-pos(i)); end %---------------------------------------------------------------------------%----------A4 Erro global de discretização da velocidade angular%---------------------------------------------------------------------------erromega = size(omega); for i=1:length(omega) erromega(i) = abs(vel(i)-omega(i)); end %-------------------------------------------------------------------------%---------Gráficos do erro global de discretização (posição-----%---------e velocidade angular) em função do tempo-------------%-------------------------------------------------------------------------figure(2) subplot(1,2,1), loglog(t,erropos,'r'); title('Erro global de discretização da posição angular em função do tempo') xlabel('Tempo,s') ylabel('Erro') grid subplot(1,2,2), loglog(t,erromega,'r'); title('Erro global de discretização da velocidade angular em função do tempo') xlabel('Tempo,s') ylabel('Erro') grid %-------------------------------------------------------------------------%--------Gráficos da posição e velocidade angular (exactas)----%-------em função do tempo com barras de erro (erro de--------%--------------discretização global)-----------------------------------%-------------------------------------------------------------------------figure(3) subplot(1,2,1), errorbar(t,pos,erropos); title('Gráfico da posição angular (exacta) com barras de erro (erro de disctretização global)') xlabel('Tempo,s') ylabel('Posição angular, rad') subplot(1,2,2), errorbar(t,omega,erromega); title('Gráfico da velocidade angular (exacta) com barras de erro (erro de disctretização global)') xlabel('Tempo,s') ylabel('Velocidade angular, rad') %-------------------------------------------------------------------------------------%------A5 Majorante do erro de truncatura (posição angular)---------------%-------------------------------------------------------------------------------------errotruncang(1) = 0; for i = 1:(length(t) - 1) [xmax(i) ymax(i)] = fminbnd(@(x) -abs(-(m^2)*c*cos(m*x) - (m^2)*d*sin(m*x)),t(i),t(i+1)); ymax = abs([ymax]); errotruncang(i+1) = ((h)/2)*ymax(i) ; end %--------------------------------------------------------------------------------------%------A5 Majorante do erro de truncatura (velocidade angular)------------%--------------------------------------------------------------------------------------errotruncvel(1) = 0; Mestrado Integrado em Engenharia Mecânica - 2013/14 11
  13. 13. Relatório do Projecto - Matemática Computacional for i = 1:(length(t)-1) [x1max(i) y1max(i)] = fminbnd(@(x) -abs((m^3)*c*sin(m*x) - (m^3)*d*cos(m*x)),t(i),t(i+1)); y1max = abs([y1max]); errotruncvel(i+1) = ((h)/2) * y1max(i) ; end %-----------------------------------------------------------------------------------------%-------Gráficos do majorante do erro de truncatura em função do tempo----%--------------(posição e velocidade angular)-----------------------------%-------------------------------------------------------------------------------figure(4) subplot(1,2,1), loglog(t,errotruncang,'r'); title('Majorante do erro de truncatura em cada passo da posição angular em função do tempo') xlabel('Tempo,s') ylabel('Majorante do erro de truncatura') grid subplot(1,2,2), loglog(t,errotruncvel,'r'); title('Majorante do erro de truncatura em cada passo da velocidade angular em função do tempo') xlabel('Tempo,s') ylabel('Majorante do erro de truncatura') grid %----------------------------------------------------------------------------------------%-------A6 Cáclulo do período da onda sinusoidal da posição angular-------%----------------------(solução exacta)----------------------------------------------%----------------------------------------------------------------------------------------indices = zeros(1,length(t)); for i = 1:(length(t)-1) if pos(i) > 0 && pos(i+1)<0 indices(i) = 1; indices (i+1) =1; end end [d] = find(indices == 1); ta = (-pos(d(1)))/(pos(d(2))-pos(d(1)))*(t(d(2))-t(d(1))) + t(d(1)) ; ta2 = (-pos(d(3)))/(pos(d(4))-pos(d(3)))*(t(d(4))-t(d(3))) + t(d(3)) ; periodopos = ta2 - ta; fprintf('O período da onda da posição angular(solução exacta) é: %f s n',periodopos); %----------------------------------------------------------------------------------------%-------A6 Cáclulo do período da onda sinusoidal da posição angular-------%----------------------(solução numérica)------------------------------------------%----------------------------------------------------------------------------------------indices1 = zeros(1,length(t)); for i = 1:(length(t)-1) if ang(i) > 0 && ang(i+1) < 0 indices1(i) = 1; indices1(i+1) =1; end end [g] = find(indices1 == 1); z0 = (-ang(g(1)))/(ang(g(2))-ang(g(1)))*(t(g(2))-t(g(1))) + t(g(1)) ; z1 = (-ang(g(3)))/(ang(g(4))-ang(g(3)))*(t(g(4))-t(g(3))) + t(g(3)) ; periodoang = z1 - z0; fprintf('O período da onda da posição angular(solução numérica) é: %f s n',periodoang) %----------------------------------------------------------------------------------------%-------A6 Cáclulo do período da onda sinusoidal da velocidade angular----%----------------------(solução exacta)-----------------------------------------------%-----------------------------------------------------------------------------------------ind = zeros(1,length(t)); for i = 1:(length(t)-1) Mestrado Integrado em Engenharia Mecânica - 2013/14 12
  14. 14. Relatório do Projecto - Matemática Computacional if omega(i) > 0 && omega(i+1) < 0 ind(i) = 1; ind(i+1) = 1; end end [u] = find(ind == 1); p0 = (-omega(d(1)))/(omega(u(2))-omega(u(1)))*(t(u(2))-t(u(1))) + t(u(1)) ; p1 = (-omega(u(3)))/(omega(u(4))-omega(u(3)))*(t(u(4))-t(u(3))) + t(u(3)) ; periodomega = p1 - p0; fprintf('O período da onda da velocidade angular(solução exacta) é: %f s n',periodomega); %-------------------------------------------------------------------------%-------A6 Cáclulo do período da onda sinusoidal da velocidade angular----%----------------------(solução numérica)---------------------------------%-------------------------------------------------------------------------ind1 = zeros(1,length(t)); for i = 1:(length(t)-1) if vel(i) > 0 && vel(i+1) < 0 ind1(i) = 1; ind1(i+1) = 1; end end [w] = find(ind1 == 1); v0 = (-vel(w(1)))/(vel(w(2))-vel(w(1)))*(t(w(2))-t(w(1))) + t(w(1)) ; v1 = (-vel(w(3)))/(vel(w(4))-vel(w(3)))*(t(w(4))-t(w(3))) + t(w(3)) ; periodovel = v1 - v0; fprintf('O período da onda da velocidade angular(solução numérica) é: %f s n',periodovel); %----------------------------------------------------------------------------------%----------------Erro efectivo do período (posição angular)---------------%----------------------------------------------------------------------------------erroperiodopos = abs(periodoang - periodopos); fprintf('O erro efectivo do período da onda sinusoidal da posição angular entre a solução exacta e a numérica é: %f n',erroperiodopos); %-----------------------------------------------------------------------------------%----------------Erro efectivo do período (velocidade angular)------------%-----------------------------------------------------------------------------------erroperiodomega = abs(periodovel -periodomega); fprintf('O erro efectivo do período da onda sinusoidal da velocidade angular entre a solução exacta e a numérica é: %f n',erroperiodomega); Anexo C – soluções analíticas Para a implementação do algoritmo A2, calculamos a solução analítica da equação diferencial dada no enunciado. Assim, a solução para a posição angular é: pos(t) = c*cos(m*t) + d*sin(m*t) (em função de t), sendo m=3.1704 (constante), c=ang(1) e d= vel(1)/m.; para a velocidade angular: omega(t) = -m*c*sin(m*t) + m*d*cos(m*t). Tanto ang(1) como vel(1) são condições iniciais indicadas pelo utilizador. Na implementação do algoritmo A5 resolvemos também analiticamente a segunda e terceira derivada de pos. Sendo que pos’’(t) = -(m^2)*c*cos(m*t) - (m^2)*d*sin(m*t) e pos’’’(t) = (m^3)*c*sin(m*t) - (m^3)*d*cos(m*t). Note-se que c, d e m são os mesmo que são usados no algoritmo A2. Anexo D – Interpolação linear Mestrado Integrado em Engenharia Mecânica - 2013/14 13
  15. 15. Relatório do Projecto - Matemática Computacional Na implementação do algoritmo A6, utilizámos uma interpolação linear para calcularmos os períodos. Usámos este método, pois o intervalo entre os pontos i e i+1, é tão pequeno que o erro associado à interpolação linear é aceitável para o nosso propósito. A interpolação linear pode definir-se assim: 𝑦𝑎−𝑦1 𝑦2−𝑦1 = 𝑡𝑎−𝑡1 𝑡2−𝑡1 , sendo ya e ta os pontos entre y1 e y2, e t1 e t2, respectivamente. Assim, queremos o ponto ta para o qual ya é igual a zero. Utilizando este método, conseguimos calcular os períodos Mestrado Integrado em Engenharia Mecânica - 2013/14 14

×