UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR … · suspensão de um automóvel, exemplo este...

31
Matemática Computacional IST 2010/2011 UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO Matemática Computacional 2010/2011 MODELO NUMERICO DE UMA SUSPENSÃO AUTOMOVEL Composição do grupo: Samuel Franco nº63303 Assinatura: [email protected] Bruno Conceição nº64957 Assinatura: [email protected] Hugo Abreu nº70663 Assinatura: [email protected]

Transcript of UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR … · suspensão de um automóvel, exemplo este...

Matemática Computacional IST 2010/2011

UNIVERSIDADE TÉCNICA DE LISBOA

INSTITUTO SUPERIOR TÉCNICO

Matemática Computacional 2010/2011

MODELO NUMERICO DE UMA SUSPENSÃO AUTOMOVEL

Composição do grupo:

Samuel Franco nº63303 Assinatura:

[email protected]

Bruno Conceição nº64957 Assinatura:

[email protected]

Hugo Abreu nº70663 Assinatura:

[email protected]

Matemática Computacional IST 2010/2011

Índice

Resumo ……...……………………………………………………………………….…1

1. Introdução ………….……..…………………………..…………….……………… 2

2. Métodos e Algoritmos ………..………….…………………………………………. 4

3. Implementação ………………...…………………..…………….………….……… 8

4. Apresentação de Resultados ……….……………………….………….………… 12

5. Discussão de Resultados …….……………………..…………….…………..…… 15

6. Conclusão …………………………………..…………….………….………….… 17

7. Agradecimentos …………………..………………..…………….….…….……… 18

8. Bibliografia …………………………………………………….………….……… 19

9. Anexos ……...……………………………………..…………….……….……...… 20

Matemática Computacional IST 2010/2011

Resumo

Com este projecto realizado no âmbito da disciplina Matemática Computacional,

pretende-se desenvolver um programa que demonstre o comportamento de uma

suspensão automóvel, neste caso para um quarto do veículo, quando esta posta a uma

perturbação exterior, nomeadamente a deformações do piso onde o automóvel circula.

O trabalho tem como base teórica as equações diferenciais ordinárias de segunda

ordem, às quais serão aplicadas, numa fase posterior, o método de Euler progressivo e

regressivo. Foi-nos desta forma pedido um algoritmo que permitisse a representação de

dois movimentos distintos (para além do já conhecido movimento do piso): um

movimento referente ao conjunto da roda e outro movimento referente ao conjunto da

massa suspensa (ou chassis).

Para além de todo o trabalho teórico e resolução de algoritmos, foi ainda

desenvolvido um programa em MATLAB que resume todas as nossas constantes e

variáveis e determina graficamente a solução do nosso problema. O programa permite

ainda a alteração dos valores predefinidos pelo enunciado, de forma a responder aos

diferentes objectivos pretendidos com este projecto.

Matemática Computacional IST 2010/2011

1 Introdução

As equações diferenciais têm inúmeras aplicações práticas na engenharia, na

química, na física bem como num vasto leque de outras áreas de conhecimento. Em

matemática, uma equação diferencial é uma equação cujas incógnitas aparecem sob a

forma das respectivas derivadas, tendo esta uma enorme utilidade na construção de

modelos matemáticos de fenómenos físicos.

Um exemplo ilustrativo da aplicação destas equações é o modelo simplificado da

suspensão de um automóvel, exemplo este que dá tema e corpo a este trabalho. A

suspensão de um automóvel é o sistema responsável por “absorver” as irregularidades

do terreno, mantendo desta forma as rodas no chão e atenuando consequentemente a

vibração do chassis.

Uma suspensão é fundamentalmente constituída por um elemento elástico, a

mola, e por um elemento viscoso, o amortecedor, estabelecendo assim uma ligação

viscoelástica entre a roda e a carroçaria.

O objectivo deste projecto consiste no desenvolvimento de um algoritmo que

permita realizar a simulação de um modelo simplificado da suspensão de ¼ de

automóvel, através da aplicação de métodos de resolução de equações diferenciais e

do método de Euler com diferenças finitas progressivas e regressivas de primeira ordem

de passo constante. Neste trabalho encontram-se também as formulações teóricas,

referentes aos diferentes métodos implementados, que permitiram o desenvolvimento

do algoritmo, assim como discussões e resultados de algumas simulações.

Figura 1.1. Modelo genérico de ¼ de uma suspensão automóvel

Matemática Computacional IST 2010/2011

Sir Isaac Newton fundamentou diversas leis da física que nos são hoje essenciais

para a resolução da maior parte dos problemas que envolvem a física.

De acordo com a 3ªLei de Newton cada massa quando sujeita a acção de uma

força, desenvolve outra força igual e de sentido contrario

im

yii Fym ''

Relativamente aos amortecedores, podemos concluir que:

Para amortecedor 2, e através da 2ª lei de Newton:

222 '' FcFkmy

Para o amortecedor 1

1221 '' FkFcFkmy

Pela lei de Hooke conclui-se que xkFk , pois se a mola tiver um deslocamento

( x ) por acção de forças exteriores, as forças nas extremidades de mola serão de

sentido contrário.

Pela lei de Kelvin-Voigt ou lei constitutiva do amortecimento conclui-se que

vcFc , pois no caso do amortecedor, o afastamento das extremidades provoca uma

reacção proporcional à velocidade relativa de afastamento, ou proximidade, das

extremidades.

Pode-se assim traduzir o comportamento dinâmico do sistema amortecedor/mola e

roda pelas seguintes equações diferenciais ordinárias, que correspondem às equações do

movimento:

)()()(0 011122

'

1

'

22

''

11

1 yykyykyycymF m

y

)()(0 122

'

1

'

22

''

22

2 yykyycymF m

y

onde, pelas condições do enunciado,

mNsc /1502 ,

mNk /600002 ,

mNk /4000002 ,

kgm 4252 ,

kgm 201

).sin()(0 twaty , com ma 01.0 e radw 271.23

Matemática Computacional IST 2010/2011

2 Métodos e Algoritmos

Foi visto que o comportamento dinâmico do sistema amortecedor/mola e roda

pode ser traduzido pelas seguintes equações diferenciais ordinárias:

)()()(0 011122

'

1

'

22

''

11

1 yykyykyycymF m

y (2.1)

)()(0 122

'

1

'

22

''

22

2 yykyycymF m

y (2.2)

Obtemos assim um sistema de duas equações diferenciais de 2ª ordem. Quer

para o método de Euler posteriormente aplicado quer para manipulação algébrica de

equações, ser-nos-á útil separar cada uma destas duas equações de 2ª ordem em duas

equações de 1ª ordem respectivamente, obtendo-se assim um sistema de quatro

equações de 1ª ordem.

A forma mais simples de passar de um sistema de duas equações para um

sistema de quatro equações de 1ª ordem, será considerar as seguintes mudanças de

variável:

1

'

1 vy

2

'

2 vy

obtendo-se o seguinte sistema final:

1

'

1 vy (2.3)

)()()( 011122122

'

11 yykyykvvcym (2.4)

2

'

2 vy (2.5)

)()( 122122

'

22 yykvvcym (2.6)

Matemática Computacional IST 2010/2011

O problema típico que pretendemos resolver pode formular-se a partir da

determinação da função y que satisfaça a equação diferencial ordinária

))(,()(' tytfty , RTtt ],[ 0 (2.7)

onde,

)(' ty derivada em ordem à variável independente t

))(,( tytf função real de duas variáveis que é considerada dada

],[ 0 Tt intervalo finito em R

Sabe-se ainda que a equação (1.7) não determina por si só uma solução única, sendo

geralmente necessário conhecer as condições iniciais, sendo estas geralmente

especificadas através do valor de y no extremo do intervalo ],[ 0 Tt , isto é,

00 )( yty

em que 00 )( yty é um valor dado. Estamos assim na presença de um problema de

valor inicial.

A resolução numérica de uma equação de primeira ordem ),(' tyfy consiste

em calcular o valor da variável de estado numa sequência discreta de instantes

igualmente espaçados entre si, com incremento de tempo h:

,...2,, 000 hthtt

onde nhttn 0

Podemos ainda substituir a variável contínua )(ty por uma variável discreta:

)()(,...,, 0210 nhtytyyyyy nn

Matemática Computacional IST 2010/2011

Método de Euler Progressivo

Por definição, a derivada de y’ é

h

tyhtyy

h

)()(lim'

0

.

Se )(tyyn , então )(1 htyyn . Admitindo que h é suficientemente pequeno,

obtemos a aproximação

h

tyhtyy

)()('

e substituindo na equação do sistema, obtemos a seguinte expressão:

),(1 nnnn ythfyy (2.8)

Método de Euler Regressivo

Já para o método regressivo, utilizamos a seguinte notação:

h

htytyy

h

)()(lim'

0

obtendo-se a seguinte expressão:

),( 111 nnnn ythfyy (2.9)

Finalmente, aplicando o método de Euler às equações descritas em (2.3), (2.4), (2.5)

e (2.6), e considerando as equações 0y e nt obtém-se:

Modelo Progressivo (aplicando a fórmula em (2.8))

hntnt )()1(

))(sin()(0 ntwany

)(')()1( 111 nyhnyny

)(')()1( 111 nvhnvnv

)(')()1( 222 nyhnyny

)(')()1( 222 nvhnvnv

Matemática Computacional IST 2010/2011

Substituindo as derivadas nas respectivas equações, temos:

hntnt )()1(

))(sin()(0 ntwany

)()()1( 111 nvhnyny

)))()(())()(())()((()()1( 011122122

1

11 nynyknynyknvnvcm

hnvnv

)()()1( 222 nvhnyny

)))()(())()((()()1( 122122

2

22 nynyknvnvcm

hnvnv

Modelo Regressivo (aplicando a fórmula em (2.9))

hntnt )()1(

))1(sin()1(0 ntwany

)1(')()1( 111 nyhnyny

)1(')()1( 111 nvhnvnv

)1(')()1( 222 nyhnyny

)1(')()1( 222 nvhnvnv

Substituindo as derivadas nas respectivas equações, temos:

hntnt )()1(

))1(sin()1(0 ntwany

)1()()1( 111 nvhnyny

)))1()1(())1()1(())1()1((()()1( 011122122

1

11 nynyknynyknvnvcm

hnvnv

)()()1( 222 nvhnyny

)))1()1(())1()1((()()1( 122122

2

22 nynyknvnvcm

hnvnv

Matemática Computacional IST 2010/2011

3 Implementação

É sabido que um dos principais objectivos deste trabalho é a implementação do

algoritmo acima descrito em MATLAB. O programa deverá dar uso às condições

iniciais dadas e determinar as funções 1y e 2y a partir da função 0y , também esta

conhecida. O resultado final obtido serão dois gráficos posição-tempo, correspondentes

aos dois métodos de Euler enunciados, onde figuram as posições relativas de 0y , 1y e

2y em função do tempo.

O MATLAB é uma ferramenta cujo elemento de dados básico é a matriz. Como

tal, é conveniente passar os nossos sistemas de equações (progressivo e regressivo)

também para matrizes. A ideia será passar para um lado da equação tudo o que são

incógnitas, e para outro lado tudo o que é valores conhecidos.

Começando então pelo método progressivo, temos:

RTQ

1000

0100

0010

0001

)1(

)1(

)1(

)1(

2

2

1

1

nv

ny

nv

ny

)))()(())()((()(

)()(

)))()(())()(())()((()(

)()(

122122

2

2

22

011122122

1

1

11

nynyknvnvcm

hnv

nhvny

nynyknynyknvnvcm

hnv

nvhny

Resolvendo o sistema em ordem das incógnitas, ficamos:

RQT1

(3.1)

)1(

)1(

)1(

)1(

2

2

1

1

nv

ny

nv

ny 1

1000

0100

0010

0001

)))()(())()((()(

)()(

)))()(())()(())()((()(

)()(

122122

2

2

22

011122122

1

1

11

nynyknvnvcm

hnv

nhvny

nynyknynyknvnvcm

hnv

nvhny

Matemática Computacional IST 2010/2011

O método regressivo segue o mesmo modelo de matrizes, ficando:

RTQ

2222

222112

2

100

001

hcmhkhchk

h

hchkhcmhkhk

h

)1(

)1(

)1(

)1(

2

2

1

1

nv

ny

nv

ny

)(

)(

)1()(

)(

22

2

0111

1

nvm

ny

nyhknvm

ny

Resolvendo o sistema em ordem das incógnitas, ficamos:

RQT1

)1(

)1(

)1(

)1(

2

2

1

1

nv

ny

nv

ny 1

2

100

001

2222

222112

hcmhkhchk

h

hchkhcmhkhk

h

)(

)(

)1()(

)(

22

2

0111

1

nvm

ny

nyhknvm

ny

onde,

T Matriz com as incógnitas a determinar

Q Matriz dos coeficientes das incógnitas

R Matriz das constantes

A nível do programa, para além dos valores dados pelo enunciado, é pedido ao

utilizador para introduzir o número de intervalos por cada comprimento de onda, que se

relaciona com o nosso passo constante da forma:

n

th

f (3.2)

onde,

h passo

ft intervalo de tempo

n número de intervalos

Matemática Computacional IST 2010/2011

Desta forma, a nível de programação, será necessário implementar um ciclo que

imprima os pontos de 1y e de 2y em cada instante n. Para isso, utilizámos uma variável

de contagem genérica i, que irá imprimir os pontos em cada instante, até que i seja igual

ao número de intervalos n. Outro aspecto que tivemos de ter em conta foi em relação às

condições iniciais, isto é, as nossas condições )0(t , )0(0y , )0(1y e por aí em diante,

correspondem à primeira posição na nossa matriz, isto é, 0]1[ t , 0]1[0 y , etc, pelo

que definimos ainda uma variável I que respeitasse o nosso contador genérico i, e que

tivesse ainda em conta a primeira posição da matriz correspondente às condições

iniciais das nossas variáveis.

Portanto, o nosso programa “MCfinal.m” conterá, aparte do código referente aos

menus guide, duas funções principais:

function progressivo

Inicialização das condições iniciais

0]1[ t , 0]1[0 y , 0]1[1 y , 0]1[2 y , 0]1[1 v , 0]1[2 v

Definição das constantes conhecidas

amplitudea , angularfreqw

Atribuição de valores aos parâmetros do enunciado

NOTA: Por defeito, os parâmetros são inicializados conforme o especificado no enunciado. O utilizador

poderá modificá-los.

Cálculo do passo

O utilizador introduz o número de intervalos e o passo é determinado através da equação (3.2)

Ciclo for

Inicia-se o contador genérico i a 0, e atribui-se ao contador de

matriz I a seguinte instrução: I = i + 1;

Define-se as matrizes [Q] e [R] para o método progressivo

Define-se a matriz [T] como o resultado da equação em (3.1) e

atribui-se os valores das incógnitas às diferentes linhas da nossa

matriz.

Evoca-se a função plot para imprimir as funções 0y , 1y e 2y

Matemática Computacional IST 2010/2011

function regressivo

Para o método regressivo, o algoritmo da função é igual ao apresentado para o

método progressivo, exceptuando a definição das matrizes [Q] e [R] e na definição da

função 0y .

FLUXOGRAMA:

INTRODUZA

Número de

intervalos

Método de Euler Progressivo

Método de Euler progressivo

Apresentação do gráfico correspondente ao método

Massa do conjunto da roda

(kg)

Massa do conjunto

suspenso (kg)

Rigidez do conjunto da roda

(N/m)

Rigidez da mola

(N/m)

Coeficiente de amortecimento linear

(Ns/m)

Intervalo de tempo

(s)

Escolha um dos seguintes métodos

Matemática Computacional IST 2010/2011

4 Apresentação de Resultados

Começamos por apresentar os resultados gerais mais satisfatórios conseguidos,

ou seja, para um passo constante h bastante pequeno:

Figura 4.1. Método de Euler Progressivo para um passo h = 0.0001

Figura 4.2. Método de Euler Regressivo para um passo h = 0.0001

Seguidamente, fizemos testes para valores de h mais baixos e para valores de h

mais elevados, obtendo os seguintes resultados:

Figura 4.3. Método de Euler Progressivo para um passo h = 0.01

Matemática Computacional IST 2010/2011

Figura 4.4. Método de Euler Regressivo para um passo h = 0.01

Figura 4.5. Método de Euler Progressivo para um passo h = 0.00003

Figura 4.6. Método de Euler Regressivo para um passo h = 0.00003

A partir deste ponto, começaremos a utilizar somente os resultados obtidos pelo

método de Euler regressivo. Este ponto será explorado com mais detalhe na discussão

dos resultados. Serão consideradas ainda as condições definidas na figura 4.2. (h =

0.0001)

Foi-nos ainda solicitado a avaliação da sensibilidade das respostas à variação das

características da suspensão. Para isso, utilizámos o nosso programa para obter os

gráficos seguintes, alterando portanto os valores do coeficiente de amortecimento:

Figura 4.7. Método de Euler Regressivo para c2 = 15Ns/m

Matemática Computacional IST 2010/2011

Figura 4.8. Método de Euler Regressivo para c2 = 1500Ns/m

E ainda alterando os valores dos sistemas de rigidez:

Figura 4.9. Método de Euler Regressivo para k1 = 40000N/m

Figura 4.10. Método de Euler Regressivo para k1 = 4000000N/m

Figura 4.11. Método de Euler Regressivo para k2 = 6000N/m

Matemática Computacional IST 2010/2011

5 Discussão de Resultados

O primeiro ponto a ser discutido neste trabalho prende-se com a influência do

passo de tempo utilizado. Para estudar mais detalhadamente este tópico, iremos

considerar as figuras de 4.1. a 4.6. Considerando um passo h = 0.0001 (figuras 4.1 e

4.2), podemos dizer que obtivemos resultados bastante satisfatórios para ambos os

métodos de Euler. Contudo, e já numa primeira análise, podemos referir que o método

de Euler regressivo apresenta-se como o método mais “fiel” às condições reais.

Reduzindo ainda mais o valor do nosso passo, para h = 0.00003 (figuras 4.5 e 4.6),

verificamos igualmente resultados bastante satisfatórios para ambos os métodos.

Podemos mesmo avançar que são os melhores resultados obtidos, pois quanto menor for

o passo, maior será o número de intervalos entre comprimentos de onda, aumentando

assim o número de pontos representados no nosso gráfico. Contrariamente, para um

passo h = 0.01 (figuras 4.3 e 4.4), verificamos uma diminuição no rigor da

representação gráfica, sendo o caso mais flagrante a figura 4.3.

Assim, e avaliando os dois métodos de Euler, verificámos que ambos fazem

aproximações grosseiras dos modelos em estudo, sendo contudo o método de Euler

regressivo bastante mais fiel que o método de Euler progressivo. Tal conclusão deve-se

ao facto de os resultados obtidos pelo método de Euler progressivo serem bastante

insatisfatórios no que diz respeito aos gráficos obtidos. Isto acontece especialmente

quando aumentamos o valor do nosso passo h, ou seja, quando diminuímos o número de

intervalos e consequentemente o número de pontos representados no gráfico.

O último ponto a ser analisado diz respeito à sensibilidade das respostas à

variação das características da suspensão.

Começamos então por analisar a sensibilidade à variação dos valores do

coeficiente de amortecimento. Como se pode ver pela figura 4.8., um aumento no valor

deste coeficiente provocará uma diminuição na amplitude das oscilações y2,

correspondente ao movimento da carroçaria. Contudo, verificar-se-á um aumento na

frequência de oscilação bem como uma tendência de uniformização do movimento. Em

Matemática Computacional IST 2010/2011

contrapartida, uma diminuição na constante de amortecimento provocará um aumento

na amplitude de y2 e consequentemente uma maior oscilação da carroçaria.

No que toca às constantes de rigidez, começaremos por analisar a constante 1k .

Ao aumentarmos o valor desta, verificamos que o gráfico de y1, correspondente ao

movimento do pneu, aproxima-se bastante do gráfico do movimento da estrada, como

podemos ver na figura 4.10. Este aumento de rigidez do sistema traduz-se numa menor

absorção de energia por parte do conjunto da roda e, por oposição, numa maior absorção

de energia por parte do conjunto da massa suspensa. Já a diminuição desta constante,

provocará uma diminuição na amplitude de oscilação da roda bem como uma

diminuição da amplitude e fraquência de oscilação do conjunto da massa suspensa.

Finalmente, ao aumentarmos o valor da constante 2k , iremos obter os valores

mais distorcidos de todos. A nível físico, um aumento de rigidez na constante 2k não

será muito viável, pois a transferência de energia dar-se-ia sobre a carroçaria, tornando-

se uma viagem desagradável. Já a diminuição da constante irá provocar uma menor

rigidez no sistema, fazendo com que o movimento da roda acompanhe inteiramente o

movimento da estrada. Já a nível da carroçaria, verificar-se-ia uma redução na sua

amplitude de oscilação bem como um aumento no comprimento de onda.

Matemática Computacional IST 2010/2011

6 Conclusão

Com este projecto tivemos a oportunidade de aprofundar o nosso conhecimento

relativamente à resolução de EOD’s, assim como a possibilidade de conhecer, estudar e

aplicar os métodos de Euler progressivo e regressivo.

Relativamente a estes dois métodos, concluímos que ambos apresentam algumas

falhas. Contudo, experienciámos que o método de Euler regressivo é um método bem

mais preciso e menos sensível a erros que o método progressivo, pelo que defendemos o

uso método regressivo em qualquer problema que envolva a aplicação do método de

Euler. Contudo, verificámos que o esforço computacional para o cálculo da condição

genérica 1nu é, para o método regressivo, muito maior. Assim, estes métodos só devem

ser utilizados quando existe a necessidade de uma precisão muito elevada.

Com este projecto tivemos também a oportunidade de nos familiarizarmos com

o comportamento de uma suspensão automóvel e as suas equações de movimento.

Auxiliados do nosso programa, foi-nos possível fazer várias simulações para o nosso

modelo de suspensão e alterar os diferentes valores das nossas constantes. Projectámos

assim o nosso modelo para diferentes valores de coeficiente de amortecimento e para

diferentes valores de constantes de rigidez, resultados estes apresentados na discussão

de resultados.

Este trabalho colocou-nos ainda em contacto com uma nova linguagem de

programação, onde aprendemos as ferramentas básicas do software MATLAB,

programa com um enorme potencial e aplicabilidade quer em projectos futuros quer

para a nossa vida profissional.

Matemática Computacional IST 2010/2011

7 Agradecimentos

É com enorme sinceridade que gostaríamos de agradecer ao Professor Miguel

Neves pelo apoio e recomendações dadas ao longo de todo o projecto. A resolução

deste só foi possível graças à sua disponibilidade e paciência nos momentos em que

sentimos mais dificuldades.

Matemática Computacional IST 2010/2011

8 Bibliografia

Livros

Pina, Heitor, Métodos Numéricos, Escolar Editora, Lisboa, A.(2010), (ISBN:

978-972-592-284-2);

Barreira, Luís, Análise Complexa e Equações Diferenciais, Colecção Ensino

da Ciência e Tecnologia, 1ª edição, IST Press, Lisboa S.(2009), (ISBN: 978-

972-8469-87-0);

Stewart, James, Cálculo, vol. 2 /tradução(Calculus): Martins, A C G, 5ª

edição, Cengage Learning, São Paulo, A.(2008), (ISBN: 85-221-0484-0);

Morais, V e Vieira, C, Matlab 7 & 6, Curso Completo, 3ª edição, FCA-

Editora Informática, Lisboa, (ISBN: 978-972-722-354-1);

Carpentier, M. P. J., Análise Numérica – teoria, F – secção de folhas, Lisboa,

F.(1993);

Romeiras, F. J., Matemática Computacional – apontamentos de aula, F –

secção de folhas, Lisboa, J.(2008);

Magalhães, L. T., Teoria Elementar de Equações Diferenciais, F – secção de

folhas, Lisboa, M.(1996);

Sites consultados

MATHEMATICAL MODELING WITH MATLAB, Acedido em 10 de

Novembro de 2010

http://dmpeli.mcmaster.ca/Matlab/Math1J03/LectureNotes/Lecture4_3.htm

Universidade do Minho, Acedido em 12 de Novembro de 2010

http://intranet.dei.uminho.pt/gdmi/galeria/temas/pdf/40517.pdf

Universidade de São Paulo, Acedido em 12 de Novembro de 2010

http://www.poli.usp.br/d/pme2599/2007/Artigos/Art_TCC_044_2007.pdf

Matlab – Documentation, Acedido em 16 de Novembro de 2010

http://www.mathworks.com/help/techdoc/index.html

Matemática Computacional IST 2010/2011

9 Anexos

Matemática Computacional IST 2010/2011

Anexo 1: Código do programa

function varargout = MCfinal(varargin) % MCFINAL M-file for MCfinal.fig % MCFINAL, by itself, creates a new MCFINAL or raises the

existing % singleton*. % % H = MCFINAL returns the handle to a new MCFINAL or the handle

to % the existing singleton*. % % MCFINAL('CALLBACK',hObject,eventData,handles,...) calls the

local % function named CALLBACK in MCFINAL.M with the given input

arguments. % % MCFINAL('Property','Value',...) creates a new MCFINAL or raises

the % existing singleton*. Starting from the left, property value

pairs are % applied to the GUI before MCfinal_OpeningFcn gets called. An % unrecognized property name or invalid value makes property

application % stop. All inputs are passed to MCfinal_OpeningFcn via

varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows

only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help MCfinal

% Last Modified by GUIDE v2.5 21-Nov-2010 16:39:34

% Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @MCfinal_OpeningFcn, ... 'gui_OutputFcn', @MCfinal_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end

if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT

% --- Executes just before MCfinal is made visible. function MCfinal_OpeningFcn(hObject, eventdata, handles, varargin)

Matemática Computacional IST 2010/2011

% This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to MCfinal (see VARARGIN)

% Choose default command line output for MCfinal handles.output = hObject;

% Update handles structure guidata(hObject, handles);

% UIWAIT makes MCfinal wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line. function varargout = MCfinal_OutputFcn(hObject, eventdata, handles) msgbox(' O utilizador devera introduzir intervalos na

ordem das dezenas de milhares, para obter

resultados satisfatorios <<< ATENCAO!!! >>> O utilizador

devera apenas introduzir algarismos, caso contrario

poderao ser obtidos resultados inesperados');

% varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structur varargout{1} = handles.output;

function m1_edit_Callback(hObject, eventdata, handles) % hObject handle to m1_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of m1_edit as text % str2double(get(hObject,'String')) returns contents of m1_edit

as a double

% --- Executes during object creation, after setting all properties. function m1_edit_CreateFcn(hObject, eventdata, handles) % hObject handle to m1_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

Matemática Computacional IST 2010/2011

function m2_edit_Callback(hObject, eventdata, handles) % hObject handle to m2_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of m2_edit as text % str2double(get(hObject,'String')) returns contents of m2_edit

as a double

% --- Executes during object creation, after setting all properties. function m2_edit_CreateFcn(hObject, eventdata, handles) % hObject handle to m2_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function k1_edit_Callback(hObject, eventdata, handles) % hObject handle to k1_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of k1_edit as text % str2double(get(hObject,'String')) returns contents of k1_edit

as a double

% --- Executes during object creation, after setting all properties. function k1_edit_CreateFcn(hObject, eventdata, handles) % hObject handle to k1_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function k2_edit_Callback(hObject, eventdata, handles) % hObject handle to k2_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB

Matemática Computacional IST 2010/2011

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of k2_edit as text % str2double(get(hObject,'String')) returns contents of k2_edit

as a double

% --- Executes during object creation, after setting all properties. function k2_edit_CreateFcn(hObject, eventdata, handles) % hObject handle to k2_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function c2_edit_Callback(hObject, eventdata, handles) % hObject handle to c2_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of c2_edit as text % str2double(get(hObject,'String')) returns contents of c2_edit

as a double

% --- Executes during object creation, after setting all properties. function c2_edit_CreateFcn(hObject, eventdata, handles) % hObject handle to c2_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

% --- Executes on button press in progressivo_pushbutton. function progressivo_pushbutton_Callback(hObject, eventdata, handles)

t(1) = 0; yo(1) = 0; y1(1) = 0; v1(1) = 0; y2(1) = 0; v2(1) = 0; n=str2num(get(handles.n_edit,'string')); tf=str2num(get(handles.t_edit,'string'));

Matemática Computacional IST 2010/2011

m1=str2num(get(handles.m1_edit,'string')); m2=str2num(get(handles.m2_edit,'string')); k1=str2num(get(handles.k1_edit,'string')); k2=str2num(get(handles.k2_edit,'string')); c2=str2num(get(handles.c2_edit,'string')); a=0.01; w=23.271; % Calculo do passo simples; h =(tf/n); passo=num2str(h); set(handles.passo,'String',passo); for i = 0:n I = i + 1; % Definicao do contador para o indice das funcoes; t(I+1) = t(I) + h; % Definicao da incrementacao do tempo; yo(I) = a*sin(w*t(I)); % Equacao que descreve a pista em que o

automovel se desloca; % Equacoes ordinarias de primeira ordem obtidas pelo Metodo de Euler

progressivo; Q = [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1]; % Matriz identidade

relativas ao modelo de suspensao automovel; R = [(y1(I))+(h*v1(I)); (v1(I))+((h/m1)*((c2*(v2(I)-v1(I))+k2*(y2(I)-

y1(I))-k1*(y1(I)-yo(I))))); y2(I)+h*v2(I); v2(I)+(h/m2)*(-c2*(v2(I)-

v1(I))-k2*(y2(I)-y1(I)))]; % Matriz das posicoes no instante anterior; T = (inv(Q))*R; %T = [ T(1,1); T(2,1); T(3,1); T(4,1)] Matriz das

resultantes da aplicacao do Metodo de Euler progressivo; y1(I+1) = T(1,1); % Equacao que descreve a oscilacao da suspensao em

torno da posicao y1, devido a perturbacao da pista em que o automovel

se desloca; v1(I+1) = T(2,1); % Equacao que descreve a velocidade de oscilacao da

suspensao em torno da altura y1, devido a perturbacao da pista em que

o automovel se desloca; y2(I+1) = T(3,1); % Equacao que descreve a oscilacao do automovel em

torno da altura y2, devido a perturbacao da pista em que o automovel

se desloca e da suspensao; v2(I+1) = T(4,1); % Equacao que descreve a velocidade de oscilacao do

automovel em torno da altura y2, devido a perturbacao da pista em que

o automovel se desloca e da suspensao; end % Equacao que descreve os intervalos de tempo e posicao do automovel; tp = 0:h:tf; yp = a*sin(w*(tp)); % ist comparativo: solucoes do Metodo de Euler devido a perturbacao da

pista; plot(tp, yp,'r', t, y1, 'b', t, y2, 'g'); axis( [0 tf -0.011 0.011]); grid on; title('Metodo de Euler Progressivo aplicado a uma Suspensao

Automovel', 'FontName', 'Tahoma', 'Color', 'black', 'FontSize',12); legend('y0', 'y1', 'y2', -1); xlabel('Tempo(s)', 'FontName', 'Tahoma\bf', 'Color', 'black',

'FontSize',10); ylabel('Posicoes(m)', 'FontName', 'Tahoma', 'Color',

'black', 'FontSize',10); hold off; clear; % hObject handle to progressivo_pushbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in regressivo_pushbutton. function regressivo_pushbutton_Callback(hObject, eventdata, handles)

Matemática Computacional IST 2010/2011

t(1) = 0; yo(1) = 0; y1(1) = 0; v1(1) = 0; y2(1) = 0; v2(1) = 0;

n=str2num(get(handles.n_edit,'string')); tf=str2num(get(handles.t_edit,'string')); m1=str2num(get(handles.m1_edit,'string')); m2=str2num(get(handles.m2_edit,'string')); k1=str2num(get(handles.k1_edit,'string')); k2=str2num(get(handles.k2_edit,'string')); c2=str2num(get(handles.c2_edit,'string'));

w = 23.731; a = 0.01; h =(tf/n); passo=num2str(h); set(handles.passo,'String',passo); for i = 0:n I = i + 1; % Definicao do contador para o indice das funcoes; t(I+1) = t(I) + h; % Definicao da incrementacao do tempo; %yo(I) = a*sin(w*t(I)); % Equacao que descreve a pista em que o

automovel se desloca no instante I; yo(I+1) = a*sin(w*t(I+1)); % Equacao que descreve a pista em que o

automovel se desloca no instante I+1; % Equacoes ordinarias de primeira ordem obtidas pelo Metodo de Euler

progressivo; Q = [ 1 (-h) 0 0; (h*(k2+k1)) (m1+(h*c2)) (-h*k2) (-h*c2); 0 0 1 (-h);

(-h*k2) (-h*c2) (h*k2) (m2+(h*c2))]; % Matriz das constantes relativas

ao modelo de suspensao automovel; R = [ (y1(I)); ((m1*v1(I))+(h*k1*yo(I+1))); y2(I); (m2*v2(I))]; %

Matriz das posicoes no instante anterior; T = (inv(Q))*R; %T = [ T(1,1); T(2,1); T(3,1); T(4,1)] Matriz das

resultantes da aplicacao do Metodo de Euler regressivo; y1(I+1) = T(1,1); % Equacao que descreve a oscilacao da suspensao em

torno da posicao y1, devido a perturbacao da pista em que o automovel

se desloca; v1(I+1) = T(2,1); % Equacao que descreve a velocidade de oscilacao da

suspensao em torno da altura y1, devido a perturbacao da pista em que

o automovel se desloca; y2(I+1) = T(3,1); % Equacao que descreve a oscilacao do automovel em

torno da altura y2, devido a perturbacao da pista em que o automovel

se desloca e da suspensao; v2(I+1) = T(4,1); % Equacao que descreve a velocidade de oscilacao do

automovel em torno da altura y2, devido a perturbacao da pista em que

o automovel se desloca e da suspensao; end % Equacao que descreve os intervalos de tempo e posicao do automovel; tp = 0:h:tf; yp = a*sin(w*(tp)); % ist comparativo: solucoes do Metodo de Euler devido a perturbacao da

pista; plot(tp, yp,'r', t, y1, 'b', t, y2, 'g'); axis( [0 tf -0.011 0.011]); grid on; title('Metodo de Euler Regressivo aplicado a uma Suspensao

Automovel', 'FontName', 'Tahoma', 'Color', 'black', 'FontSize', 12); legend('y0', 'y1', 'y2',-1);

Matemática Computacional IST 2010/2011

xlabel('Tempo(s)', 'FontName', 'Tahoma\bf', 'Color', 'black',

'FontSize', 10); ylabel('Posicoes(m)', 'FontName', 'Tahoma', 'Color',

'black', 'FontSize', 10); hold off; clear; % hObject handle to regressivo_pushbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

function n_edit_Callback(hObject, eventdata, handles) % hObject handle to n_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of n_edit as text % str2double(get(hObject,'String')) returns contents of n_edit

as a double

% --- Executes during object creation, after setting all properties. function n_edit_CreateFcn(hObject, eventdata, handles) % hObject handle to n_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function t_edit_Callback(hObject, eventdata, handles) % hObject handle to t_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of t_edit as text % str2double(get(hObject,'String')) returns contents of t_edit

as a double

% --- Executes during object creation, after setting all properties. function t_edit_CreateFcn(hObject, eventdata, handles) % hObject handle to t_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');

Matemática Computacional IST 2010/2011

end

function passo_Callback(hObject, eventdata, handles) % hObject handle to passo (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of passo as text % str2double(get(hObject,'String')) returns contents of passo

as a double

% --- Executes during object creation, after setting all properties. function passo_CreateFcn(hObject, eventdata, handles) % hObject handle to passo (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

% --- Executes during object creation, after setting all properties. function ist_CreateFcn(hObject, eventdata, handles) % hObject handle to ist (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called imshow('ist.tif') % Hint: place code in OpeningFcn to populate ist

% --- Executes during object creation, after setting all properties. function imagem_CreateFcn(hObject, eventdata, handles) % hObject handle to imagem (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called imshow('suspensao.tif') % Hint: place code in OpeningFcn to populate imagem

Matemática Computacional IST 2010/2011

Anexo 2: Funcionamento do programa

Valores pré-definidos pelo programa, podendo o

utilizador alterar conforme o

modelo que pretenda analisar

Quantidade e valor dos

intervalos temporais em que

se pretende fazer a analise

Botão para calcular a aproximação das

posições pelo método de Euler progressivo

Botão para calcular a aproximação das

posições pelo método de Euler regressivo

Display do passo

de interpolação

Display do gráfico relativo ao

modelo seleccionado anteriormente