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:
Bruno Conceição nº64957 Assinatura:
Hugo Abreu nº70663 Assinatura:
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
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